我有这样的XML:
<XML>
<dealings>
<members>
<member path="Swap.1.'stream#1.Schedule'" source="0" type="string">CONTEND</member>
<member path="Swap.1.'stream#2.Schedule'" source="0" type="string">CONTEND</member>
<member path="Swap.1.'stream#3.Schedule'" 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开始。
答案 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>