我想使用xsl将xml以下转换为csv。我的挑战是我必须从不同的根源和顺序获取元素
<root>
<child1>
<value1>100</value1>
</child1>
<child1>
<value1>200</value1>
</child1>
<child2>
<value2>300</value2>
</child2>
<child2>
<value2>400</value2>
</child2>
</root>
预期输出为:
child1,child2
100,300
200,400
有谁知道我们如何使用xslt实现这一目标?
答案 0 :(得分:0)
您可以使用以下XSLT获取所需的输出
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="root">
<xsl:variable name="countChild1" select="count(child1)" />
<xsl:variable name="countChild2" select="count(child2)" />
<xsl:variable name="column1" select="local-name(child1)" />
<xsl:variable name="column2" select="local-name(child2)" />
<!-- Print header row -->
<xsl:value-of select="$column1" />
<xsl:text>,</xsl:text>
<xsl:value-of select="$column2" />
<xsl:text>
</xsl:text>
<!-- Print values -->
<xsl:if test="$countChild1 = $countChild2">
<xsl:for-each select="child1">
<xsl:variable name="index" select="position()" />
<xsl:value-of select="normalize-space(.)" />
<xsl:text>,</xsl:text>
<xsl:value-of select="normalize-space(../child2[$index])" />
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
输出
child1,child2
100,300
200,400