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