XLST将XML转换为CSV
我正在尝试将下面的.XML转换为CSV。我遇到的问题是输出中不断出现重复的“批处理作业”标记,而我所需要的只是批处理内容的列表。所以我想要得到的结果是: GX2320、GX2023、GX2218等 欢迎指点 谢谢XLST将XML转换为CSV,xml,csv,Xml,Csv,我正在尝试将下面的.XML转换为CSV。我遇到的问题是输出中不断出现重复的“批处理作业”标记,而我所需要的只是批处理内容的列表。所以我想要得到的结果是: GX2320、GX2023、GX2218等 欢迎指点 谢谢 <?xml version="1.0" encoding="utf-8"?> <data> <batch job="1"> <index id="batch">GX2320</index> </batch&
<?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>
GX2320
GX2023
GX2218
GX2635
GX2532
MR12358
GM1387
GM1769
GN6605
GW1435
GX2120
GX2054
GR42348
GE26813
GR36258
到目前为止,我们一直在尝试使以下语句可操作,但只获得空白文件输出,就好像找不到每个子语句一样:
<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>
,
;
您的模板匹配太深入了。match=“/*/*/child::*”
的上下文将是index
。该元素没有任何子元素,因此您的xsl:for-each
从不选择任何内容
假设它确实选择了索引
。然后您的position()
测试将永远无法工作,因为索引始终位于第一个位置
您应该匹配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>
,
;
注意:如果需要,您可以将批处理
和索引
名称替换为*
。我一直在尝试读取每个子语句,然后每次转发输出都为空:见上文。谢谢大牛,是的,效果很好,谢谢你的投入!