2017-04-03 84 views
0

解析XML元素中的字符串轉換成CSV我是新來的XSLT,並希望對以下問題有所幫助:使用XSLT

我有XML,包括關於包級聯信息。我需要使用XSLT(分離器將分號),將其解析爲CSV。我需要對所有的連接項目生成的分割線,所以一些換每個 - 循環也需要。

的XML看起來是這樣的:

<Package> 
    <Content>Goodies</Content> 
    <Weight>TotalWeight</Weight> 
    <Dimensions>Lenght1/Width1/Height1/Weight1,Lenght2/Width2/Height2/Weight2</Dimensions> 
    <PackingType>Pallet</PackingType> 
</Package> 

和所需的輸出應該是這樣的:

1,超值服務;總權重; Lenght1;寬度1; Height1;重量1;托盤 2,超值服務;總權重; Lenght2;寬度2;身高2; 1加權;托盤

,這應該使用XSLT 1.0(是的,我們有一些限制)來完成。

在此先感謝!

+1

做一個搜索 「記號化」。 –

回答

0

嘗試這樣:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="Package"> 
    <xsl:call-template name="row"> 
     <xsl:with-param name="pack" select="."/> 
     <xsl:with-param name="str" select="Dimensions"/> 
     <xsl:with-param name="nn" select="1"/> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="row"> 
    <xsl:param name="pack"/> 
    <xsl:param name="str"/> 
    <xsl:param name="nn"/> 
    <xsl:variable name="s1" select="substring-before($str, ',')"/> 
    <xsl:if test="$s1"> 
     <xsl:variable name="s2" select="substring-after($str, ',')"/> 
     <xsl:call-template name="rowInternal"> 
     <xsl:with-param name="pack" select="$pack"/> 
     <xsl:with-param name="str" select="$s1"/> 
     <xsl:with-param name="nn" select="$nn"/> 
     </xsl:call-template> 
     <xsl:call-template name="row"> 
     <xsl:with-param name="pack" select="$pack"/> 
     <xsl:with-param name="str" select="$s2"/> 
     <xsl:with-param name="nn" select="$nn+1"/> 
     </xsl:call-template> 
    </xsl:if> 
    <xsl:if test="not($s1) and $str"> 
     <xsl:call-template name="rowInternal"> 
     <xsl:with-param name="pack" select="$pack"/> 
     <xsl:with-param name="str" select="$str"/> 
     <xsl:with-param name="nn" select="$nn"/> 
     </xsl:call-template> 
    </xsl:if> 
    </xsl:template> 

    <xsl:template name="rowInternal"> 
    <xsl:param name="pack"/> 
    <xsl:param name="str"/> 
    <xsl:param name="nn"/> 
    <xsl:value-of select="$nn"/> 
    <xsl:text>;</xsl:text> 
    <xsl:value-of select="$pack/Content"/> 
    <xsl:text>;</xsl:text> 
    <xsl:value-of select="$pack/Weight"/> 
    <xsl:text>;</xsl:text> 
    <xsl:value-of select="translate($str, '/', ';')"/> 
    <xsl:text>;</xsl:text> 
    <xsl:value-of select="$pack/PackingType"/> 
    <xsl:text>&#xA;</xsl:text> 
    </xsl:template> 

</xsl:transform> 
+0

謝謝!這似乎工作:) –