我正在尝试将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值为“已售出”时,输出文件应始终具有分配给DailyPrice列的ChargeAmount值;当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
请注意输出不需要任何页眉/列名称。
赞赏这方面的任何指针/帮助。
答案 0 :(得分:0)
如果我读得正确,你想做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="PartsPriceListLine">
<xsl:value-of select="Price[PriceCode='Sold']/ChargeAmount" />
<xsl:text>,</xsl:text>
<xsl:value-of select="Price[PriceCode='TradeIn']/ChargeAmount" />
<xsl:text>,</xsl:text>
<xsl:value-of select="Price[PriceCode='List']/ChargeAmount" />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>