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値は任意の順序で来ることができましたPriceCode値はときTradePrice列に、「販売」されたとき、しかし、出力ファイルは常にDailyPrice列に割り当てられChargeAmountの値を持つ必要がありますPriceCodeの値が 'TradeIn'であり、PriceCodeの値が 'List'の場合、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を使用しました。あなたのコメントは役に立ちました。 –