在使用XSLT进行转换之后,我需要在节点名称中获得许多XML节点的路径

时间:2010-07-07 19:23:04

标签: xml xslt

我有这样的XML:

<XML>
    <dealings>
        <members>
            <member path="Swap.1.&apos;stream#1.Schedule&apos;" source="0" type="string">CONTEND</member>
            <member path="Swap.1.&apos;stream#2.Schedule&apos;" source="0" type="string">CONTEND</member>
            <member path="Swap.1.&apos;stream#3.Schedule&apos;" source="0" type="string">CONTEND</member>
        </members>
    </dealings>
</XML>

我需要进行转换,除了更改内容之外,在流#之后获取要在节点名称中使用的数字,得到如下内容:

<XML>
    <flows-1>
        CONTEND
    </flows-1>
    <flows-2>
        CONTEND
    </flows-2>
    <flows-3>
        CONTEND
    </flows-3>  
</XML>

我没有得到正确的方法来获得这个号码。重要的是要获得数字,而不是按顺序列出或通过猜测,因为数字可能不是按顺序,顺序或甚至从1开始。

1 个答案:

答案 0 :(得分:4)

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <XML>
            <xsl:apply-templates/>
        </XML>
    </xsl:template>
    <xsl:template match="member">
        <xsl:element name="flows-{substring-before(substring-after(@path,'#'),'.')}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

结果(正确)输出:

<XML>
    <flows-1>CONTEND</flows-1>
    <flows-2>CONTEND</flows-2>
    <flows-3>CONTEND</flows-3>
</XML>