【发布时间】:2019-01-23 04:00:35
【问题描述】:
我需要使用 XSLT 将一些 xml 转换为另一个。
输入看起来像这样:
<RootNode>
<Products>
<Price>10.02</Price>
<TaxRate>1.23</TaxRate>
<CurrencyId>USD</CurrencyId>
</Products>
</RootNode>
和输出:
<RootNode>
<Products>
<Product>
<Prices>
<Price>10.02</Price>
<TaxRate type="0">16</TaxRate>
<Currency>USD</Currency>
</Prices>
</Product>
</Products>
</RootNode>
现在我正在尝试这样的事情,但这不起作用:
<xsl:template match="/">
<RootElement>
<xsl:for-each select="Supplier-Catalog/Products">
<xsl:attribute-set name="Price" use-attribute-sets="Prices">
<xsl:value-of select="Price" />
</xsl:attribute-set>
</xsl:for-each>
</RootElement>
</xsl:template>
</xsl:stylesheet>
TaxRate type="0" - 取决于输入的 TaxRate 值。
有人可以帮我解决这个问题吗?
编辑
好的,我创建了这样的东西:
<xsl:template match="/">
<RootElement>
<xsl:for-each select="Supplier-Catalog/Products">
<Prices>
<Price>
<xsl:value-of select="Price" />
</Price>
<TaxRate>
<xsl:value-of select="TaxRate" />
</TaxRate>
<Currency>
<xsl:value-of select="CurrencyId" />
</Currency>
</Prices>
</xsl:for-each>
</RootElement>
</xsl:template>
这没问题,但仍然不知道如何将“type=0”添加到 TaxRate 属性
编辑 2
还有一个问题...
对于这个结构
Products>
<Stock>
<Quantity>5</Quantity>
</Stock>
<Stock>
<Quantity>50</Quantity>
</Stock>
</Products><Products>
<Stock>
<Quantity>1</Quantity>
</Stock>
<Stock>
<Quantity>2</Quantity>
</Stock>
</Products>
还有这个 XSLT
<xsl:for-each select="Products">
<Product>
<Stock>
<Quantity>
<xsl:value-of select="sum(//Products/Stock/Quantity)" />
</Quantity>
</Stock>
</Product>
</xsl:for-each>
</Products>
我明白了:
<Products>
<Product>
<Stock>
<Quantity>58</Quantity>
</Stock>
</Product>
<Product>
<Stock>
<Quantity>58</Quantity>
</Stock>
</Product>
这是错误的,因为它将所有值相加,而不是:
<Products>
<Product>
<Stock>
<Quantity>55</Quantity>
</Stock>
</Product>
<Product>
<Stock>
<Quantity>3</Quantity>
</Stock>
</Product>
我在哪里弄错了?
【问题讨论】:
-
你能解释一下 TaxRate 类型的逻辑吗?如果它不总是 0,那么决定它的值的规则是什么?谢谢
-
你可以用例如写属性
<TaxRate type="0"><xsl:value-of select="TaxRate"/></TaxRate>,但正如蒂姆所说,根据您计算值的逻辑,您可能需要以不同的方式进行操作.. -
1.23 =0 和值 16, 0.7 = 1 和值 3
-
TaxRate 会只包含“1.23”或“0.7”,还是可以包含其他值?
-
1.23、0.7 和 0。只有这三个值是可能的