【发布时间】:2017-05-27 06:23:22
【问题描述】:
我正在尝试将 XML 转换为平面文件。 XML 输入是:
<PartsPriceListLine>
<PartsProductItem>
<ItemID>1234</ItemID>
<PartName>abcd</PartName>
<PartItemDescription>test</PartItemDescription>
</PartsProductItem>
<Price>
<PriceCode>List</PriceCode>
<ChargeAmount>544.04</ChargeAmount>
</Price>
<Price>
<PriceCode>TradeIn</PriceCode>
<ChargeAmount>489.64</ChargeAmount>
</Price>
<Price>
<PriceCode>Sold</PriceCode>
<ChargeAmount>408.03</ChargeAmount>
</Price>
</PartsPriceListLine>
PriceCode 值可以按任何顺序出现,但是,当 PriceCode 值为“Sold”时,输出文件应始终将 ChargeAmount 值分配给 DailyPrice 列,当 PriceCode 值为“TradeIn”时分配给 TradePrice 列和 ListPrice当 PriceCode 值为 'List' 时的列。
我写的 XSLT 如下:
<xsl:for-each select="s2:PartsPriceListLine/s2:Price">
<xsl:variable name="PriceCode" select="string(s2:PriceCode/text())"/>
<xsl:variable name="ChargeAmount" select="string(s2:ChargeAmount/text())"/>
<xsl:choose>
<xsl:when test = "$PriceCode = 'Sold'">
<DAILY_PRICE>
<xsl:value-of select="concat($ChargeAmount,',')" />
</DAILY_PRICE>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test = "$PriceCode = 'Trade-In'">
<TRADE_PRICE>
<xsl:value-of select="concat($ChargeAmount,',')" />
</TRADE_PRICE>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test = "$PriceCode = 'List'">
<LIST_PRICE>
<xsl:value-of select="concat($ChargeAmount,',')" />
</LIST_PRICE>
</xsl:when>
</xsl:choose>
</xsl:for-each>
使用上面的代码,值将按照它们在 XML 输入文件中提到的顺序输入到输出中。
上述 XSLT 的输出是:
DAILY_PRICE,TRADE_PRICE,LIST_PRICE
544.04,489.64,408.03
而预期结果是:
DAILY_PRICE,TRADE_PRICE,LIST_PRICE
408.03,489.64,544.04
请注意,输出不需要任何标题/列名。
感谢您提供这方面的任何指针/帮助。
【问题讨论】:
标签: xml csv if-statement xslt foreach