2017-03-01 5 views
0

XMLをCSVに変換するためにXSLTを作成しようとしています。検索中に私は非常に多くの例を見つけましたが、繰り返されていない動的XMLノードに関連する例は見つかりませんでした。ここで私のXMLと期待される出力を配置している人は、以下の出力を得る方法を私に教えてください。XSLTを使用して動的XMLをCSVに変換し、XMLノードが完全に反復しない

私のXMLは

<SttlmOblgtnRpt> 
    <RptParams> 
     <RptId>02</RptId> 
     <RptDtAndTm> 
      <DtTm>2016-12-12T00:00:00</DtTm> 
     </RptDtAndTm> 
    </RptParams> 
    <Pgntn> 
     <PgNb>11</PgNb> 
     <LastPgInd>true</LastPgInd> 
    </Pgntn> 
    <ClrMmb> 
     <PrtryId> 
      <Id>210016</Id> 
      <Issr>MEMBER</Issr> 
     </PrtryId> 
    </ClrMmb> 
</SttlmOblgtnRpt> 

ですそして、私の予想出力は

RPTIDで、DTTM、PgNb、LastPgInd、ID、ISSR

02,2016-12-12T00:00:00、 1、true、210016、メンバー

ありがとう、 Mahesh。

+0

基本的にはすべてのテキストノードを出力します。それをやる。 – cweiske

答えて

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="/"> 
    <xsl:variable name="data" select="//*[not(*)]" /> 
    <!-- header --> 
    <xsl:for-each select="$data"> 
     <xsl:value-of select="name()" /> 
     <xsl:if test="position()!=last()"> 
      <xsl:text>,</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
    <xsl:text>&#10;</xsl:text> 
    <!-- data --> 
    <xsl:for-each select="$data"> 
     <xsl:value-of select="." /> 
     <xsl:if test="position()!=last()"> 
      <xsl:text>,</xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

、結果は次のようになります:

RptId,DtTm,PgNb,LastPgInd,Id,Issr 
02,2016-12-12T00:00:00,11,true,210016,MEMBER 
それはあなたがすべてのリーフノードのためのセルとのデータの出力単一の行を、したいように聞こえます
+0

ありがとうマイケル...それは正常に動作します。実際にはXSLTは全く新しいです。私は別のノードを持つXMLファイルを持っていて、内部的にはサブノードを持ち、内部ノードにはサブノードも含まれているので、その時までにCSV形式で適切な出力を得ることができません。私は次のリンクに適切な入力/出力で同じ質問を掲示しました。見て、私にXSLTロジックを教えてください。 http://stackoverflow.com/questions/42534968/xslt-to-convert-dynamic-xml-to-csv-and-the-xml-nodes-are-not-completely-repetati – Mahesh

関連する問題