2017-03-25 220 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

嗨丹尼爾,是的,這很好,感謝您的意見! –