2017-03-25 322 views
2

我有下面的.XML,我试图转换为CSV。我遇到的问题是重复的“批量作业”标签不断出现在输出中,当我需要的是批量内容的列表时。因此,我试图去输出是:XLST将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>&#xD;</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 
+1

你到目前为止尝试过什么? – larsks

+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>&#xD;</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

注意:如果需要,您可以用*更换batchindex名。

+0

嗨丹尼尔,是的,这很好,感谢您的意见! –