2017-03-28 108 views
0

我的XML看起来像XML值:入门基于两个属性条件

 <Taxes> 
     <MyTax currency="USD" MyTaxCat="City">0.00000</MyTax> 
     <MyTax currency="USD" MyTaxCat="County">0.01000</MyTax> 
     <MyTax currency="USD" MyTaxCat="District">0.00000</MyTax> 
     <MyTax currency="USD" MyTaxCat="State">0.01000</MyTax> 
     </Taxes> 

我的XSLT:

   <MyTaxes> 
      <xsl:for-each select="Taxes/MyTax"> 
         <Tax> 
         <xsl:attribute name="TaxCategory">VAT</xsl:attribute> 
         <xsl:attribute name="TaxName"> 
         <xsl:value-of select="@MyTaxCat" /> 
         </xsl:attribute> 
         <xsl:attribute name="TaxPerLine"> 
         <xsl:value-of select="/MyTax[@currency='USD']"/> 
         </xsl:attribute> 
         </Tax> 

         </xsl:for-each> 
     </MyTaxes> 

在我的输出,所有TaxPerLine是越来越设定为0.0000

 <MyTaxes> 
      <Tax TaxCategory="VAT" TaxName="City" TaxPerLine="0.00000" /> 
      <Tax TaxCategory="VAT" TaxName="County" TaxPerLine="0.00000" /> 
      <Tax TaxCategory="VAT" TaxName="District" TaxPerLine="0.00000" /> 
      <Tax TaxCategory="VAT" TaxName="State" TaxPerLine="0.00000" /> 
     </MyTaxes> 

任何想法我在这里做错了什么?

谢谢!

+0

更改为和未来,发布完整的XSLT或至少从“模板匹配=”“> –

+0

谢谢,但我更早地尝试过,它给了我这个错误:错误:描述:期望代币'EOF'发现'['。' 。 - > [< - @ currency ='USD'] –

+2

尝试''。 –

回答

1

检查这个代码,我认为你的输出得到

<xsl:decimal-format name="ajeet" decimal-separator="." grouping-separator=","/> 
<xsl:template match="/root"> 
<MyTaxes> 
<xsl:for-each select="Taxes/MyTax"> 
<Tax> 
<xsl:attribute name="TaxCategory">VAT</xsl:attribute> 
<xsl:attribute name="TaxName"> 
<xsl:value-of select="@MyTaxCat" /> 
</xsl:attribute> 
<xsl:attribute name="TaxPerLine"> 
<xsl:value-of select="format-number(current()[@currency='USD'], '0.0000', 'ajeet')"/> 
</xsl:attribute> 
</Tax> 
</xsl:for-each> 
</MyTaxes> 
1

看您已经定义在一开始的路径MyTax所以无论如何方案会忽略你的请求/MyTax[@currency='USD']"/>的一部分。

要么你可以定义另一个每个-for循环的一部分,或者你可以只usung current()[@currency='USD'] 此外试试,你不应该用“/”前启动:/ MyTax因为你没有MyTax之前定义的根元素。

这给了我正确的输出。祝好运。