2012-05-05 16 views
-2
<?xml version="1.0" encoding="UTF-8"?> 
<school> 
<classes> 
    <class> 
     <name>DEPT-NAME</name> 
     <place>ROOM-NO</place> 
    </class> 
</classes> 
<alldata> 
    <data> 
     <value>CSE</value> 
     <value>101</value> 
    </data> 
    <data> 
     <value>IT</value> 
     <value>202</value> 
    </data> 
</alldata> 
<students> 
    <student> 
     <DEPT-NAME>CSE</DEPT-NAME> 
     <name>Jhon</name> 
     <roll>111</roll> 
    </student> 
    <student> 
     <DEPT-NAME>CSE</DEPT-NAME> 
     <name>Zubi</name> 
     <roll>112</roll> 
    </student> 
    <student> 
     <DEPT-NAME>IT</DEPT-NAME> 
     <name>Jack</name> 
     <roll>121</roll> 
    </student> 
    <student> 
     <DEPT-NAME>IT</DEPT-NAME> 
     <name>Razz</name> 
     <roll>122</roll> 
    </student> 
</students> 
</school> 

は、私が欲しい誰でもこのxmlのXSLTコードを書いてください。

  1. DEPT-NAMEのようなCSV出力ROOM-NO NAME ROLLNO
  2. CSE 101 JHON 111
  3. __ _ __ _ ___ _Zubi 112
  4. IT 202ジャック121
  5. __ _ __ _ ___ _Razz 122

私はこの方法のようにやろうとしたが、それはあなたが私ので、再フォーマットする必要があり、作業

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 
     <xsl:template match="/"> 
     <xsl:text>SCHOOL</xsl:text> 

     <xsl:variable name="StudentCSE"> 
      <xsl:for-each select="school/students/student[DEPT-NAME='CSE']"> 
       <xsl:value-of select="name"/><xsl:text>,</xsl:text> 
       <xsl:value-of select="roll"/> 
      </xsl:for-each> 
     </xsl:variable> 

     <xsl:variable name="Value"> 
     <xsl:for-each select="school/alldata/data"> 
        <xsl:text>&#010;</xsl:text> 
        <xsl:for-each select="value" > 
         <xsl:value-of select="."/><xsl:text>,</xsl:text> 
        </xsl:for-each> 
          <xsl:copy-of select="$StudentCSE"/> 
        </xsl:for-each> 
     </xsl:variable> 

     <xsl:for-each select="school/classes/class"> 
       <xsl:text>&#010;</xsl:text> 
       <xsl:value-of select="name"/><xsl:text>,</xsl:text> 
       <xsl:value-of select="place"/><xsl:text>,NAME,ROll</xsl:text> 
       <xsl:copy-of select="$Value"/> 
     </xsl:for-each> 
     </xsl:template> 
</xsl:stylesheet> 
+0

キー>みましょう私たちは、ペイロードとしてデータノードやキーなどのデータの最初の値要素の内容を使用してハッシュマップ/辞書を作成しますQ1:どのようにファイルを変換しようとしていますか?どのようなプログラムを使用していますか? Q2:エラーや警告がありましたか? Q3:まさに "働いていない"のは何ですか?どうか明らかにしてください。 – paulsm4

+0

xmlをcsvファイルに変換しようとしましたが、エラーはありませんが、フォーマットされた方法でデータを取得することはできません。 出力は次のようになります。 名前を付けてROOM-NO NAME ROLL CSE 101 Jhon 111 Zubi 112 IT 202 Jhon 111 Zubi 112 – Sndy

+0

Amazon Turkのようなサービスを使うべきだと思います。投票を終了する。 – jcollum

答えて

2

をdid't簡単にするために多くの要素を削除しましたが、問題を解決するには、 xsl:key >を使ってクラスルーム検索を作成してください。

<のxsl:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

    <xsl:key name="class-lookup" match="school/alldata/data" use="value[1]" /> 

    <xsl:template match="/"> 
     <!-- header --> 
     <xsl:for-each select="school/classes/class"> 
     <xsl:value-of select="name"/>, <xsl:value-of select="place"/>, NAME, ROll 
     </xsl:for-each> 

     <!-- data --> 
     <xsl:for-each select="school/students/*"> 
     <xsl:text>&#10;</xsl:text> 
     <xsl:value-of select="DEPT-NAME"/>, <xsl:value-of select="key('class-lookup', DEPT-NAME)/value[2]" />, <xsl:value-of select="name"/>, <xsl:value-of select="roll"/> 
     </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

出力:

DEPT-NAME, ROOM-NO, NAME, ROll 

CSE, 101, Jhon, 111 
CSE, 101, Zubi, 112 
IT, 202, Jack, 121 
IT, 202, Razz, 122 
+0

ありがとうございます。 2回CSE/ITを見せていますが、それは問題ありません。私は出力を得た。 – Sndy

関連する問題