<?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 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>
</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>
</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 :(得分:2)
您可能需要重新格式化,因为我为了简单起见删除了许多元素,但要解决您的问题,请尝试使用&lt; xsl:key&gt;创建课堂查询。
&lt; xsl:key&gt;让我们创建一个hashmap / dictionary,使用数据节点作为有效负载,并将数据的第一个值元素的内容作为键:
<?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> </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