0
我試圖將XML轉換爲平面文件。 XML輸入是:使用XSLT按特定順序生成平面文件輸出
<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值可以派上任何順序,但是,輸出文件應始終分配給DailyPrice列ChargeAmount的值時PriceCode值「已售出」,以TradePrice列時當PriceCode值爲'List'時,PriceCode值爲'TradeIn'和ListPrice列。
我已經如下書面XSLT:
<xsl:for-each select="s2:PartsPriceListLine/s2:Price">
<xsl:variable name="PriceCode" select="string(s2:PriceCode/text())"/>
\t \t \t <xsl:variable name="ChargeAmount" select="string(s2:ChargeAmount/text())"/>
\t \t \t
<xsl:choose>
\t \t \t <xsl:when test = "$PriceCode = 'Sold'">
\t \t \t <DAILY_PRICE>
\t \t \t
<xsl:value-of select="concat($ChargeAmount,',')" />
</DAILY_PRICE>
\t \t \t </xsl:when>
\t \t \t </xsl:choose>
\t \t \t <xsl:choose>
\t \t \t <xsl:when test = "$PriceCode = 'Trade-In'">
\t \t \t <TRADE_PRICE>
<xsl:value-of select="concat($ChargeAmount,',')" />
</TRADE_PRICE>
\t \t \t </xsl:when>
\t \t \t </xsl:choose>
\t \t \t <xsl:choose>
\t \t \t <xsl:when test = "$PriceCode = 'List'">
\t \t \t <LIST_PRICE>
<xsl:value-of select="concat($ChargeAmount,',')" />
</LIST_PRICE>
\t \t \t </xsl:when>
\t \t \t </xsl:choose>
\t </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
請注意輸出不需要任何頁眉/列名。
讚賞這方面的任何指針/幫助。
感謝指針,我管理一個稍微不同的代碼來完成任務。我爲每個節點申請了每個循環,然後使用xsl來檢查條件。您的評論有幫助。 –