我有以下.XML,我试图转换为CSV。我遇到的问题是重复的“批处理作业”标记一直出现在输出中,当我需要的只是批处理内容的列表时。所以我想要的输出是:
GX2320,GX2023,GX2218等。
任何指示赞赏。
由于
<?xml version="1.0" encoding="utf-8"?>
<data>
<batch job="1">
<index id="batch">GX2320</index>
</batch>
<batch job="2">
<index id="batch">GX2023</index>
</batch>
<batch job="3">
<index id="batch">GX2218</index>
</batch>
<batch job="4">
<index id="batch">GX2635</index>
</batch>
<batch job="5">
<index id="batch">GX2532</index>
</batch>
<batch job="6">
<index id="batch">MR12358</index>
</batch>
<batch job="7">
<index id="batch">GM1387</index>
</batch>
<batch job="8">
<index id="batch">GM1769</index>
</batch>
<batch job="9">
<index id="batch">GN6605</index>
</batch>
<batch job="10">
<index id="batch">GW1435</index>
</batch>
<batch job="11">
<index id="batch">GX2120</index>
</batch>
<batch job="12">
<index id="batch">GX2054</index>
</batch>
<batch job="13">
<index id="batch">GR42348</index>
</batch>
<batch job="14">
<index id="batch">GE26813</index>
</batch>
<batch job="15">
<index id="batch">GR36258</index>
</batch>
到目前为止,我一直试图让以下操作,但只获得空白文件输出,好像它无法找到每个子语句:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:template match="/*/*/child::*">
<xsl:for-each select="child::*">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(.)"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
你的模板匹配太深了。 match="/*/*/child::*"
的上下文将是index
。该元素没有任何子元素,因此xsl:for-each
永远不会选择任何内容。
让我们说它确实选择了index
。然后,position()
测试永远不会有效,因为index
始终位于第一个位置。
您应该匹配batch
并输出index
...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*/batch">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(index)"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
注意:如果需要,您可以将batch
和index
名称替换为*
。