2012-05-05 22 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> 

我想一個csv輸出像任何人都請爲此xml編寫XSLT代碼?

  1. DEPT-NAME 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

問題1:你如何轉換文件?你使用什麼程序? Q2:你有沒有收到任何錯誤或警告?問題3:究竟是什麼「不起作用」?請澄清。 – paulsm4

+0

我試圖將xml轉換爲csv文件,沒有錯誤,但我無法以格式化的方式檢索數據.. 我得到的輸出像.. 部門名稱室 - 沒有名稱卷 CSE 101 Jhon 111 Zubi 112 IT 202 Jhon 111 Zubi 112 – Sndy

+0

我想你應該使用像亞馬遜土耳其這樣的服務。投票結束。 – jcollum

回答

2

您可能必須重新格式化,因爲我刪除了許多簡單的元素,但要解決您的問題,請嘗試使用< xsl:鍵>創建教室查找。

的<的xsl:我們創建使用作爲有效載荷的數據節點和數據的第一值元件的作爲密鑰的內容密​​鑰>讓我們一個HashMap /詞典:

<?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

謝謝各不相同。它展示CSE/IT兩次,但這很好。我得到了輸出。 – Sndy