Xml XSLT:定义节点id
我想输出一些节点。其中一些被定义为目标节点。有些是源节点 输入就像Xml XSLT:定义节点id,xml,xslt,Xml,Xslt,我想输出一些节点。其中一些被定义为目标节点。有些是源节点 输入就像 <?xml version="1.0" encoding="UTF-8"?> <Element type="node" id="Node-a" name="a"/> <Element type="node" id="Node-b" name="b"/> <Element type="node" id="Node-c" name="c"/> ...... ...... 首先我试
<?xml version="1.0" encoding="UTF-8"?>
<Element type="node" id="Node-a" name="a"/>
<Element type="node" id="Node-b" name="b"/>
<Element type="node" id="Node-c" name="c"/>
......
......
首先我试过这个
<source node id="{generate-id()}"/>
<target node id="{generate-id()}"/>
它可以输出所有节点。但问题是存在双节点
所以我试着这样做
<source node id="{generate-id(@source)}"/>
<target node id="{generate-id(@target)}"/>
但是,之后我发现结果只能输出两个节点
我想问一下如何定义正确的节点id,然后将它们分开。或者我应该定义一些变量?请帮帮我。谢谢。首先
这是无效的:
<source node id="{generate-id()}"/>
XSLT:
你的输入是什么样子的?嘿,菲尔,是这样的。“其中一些被定义为目标节点,一些是源节点。”这个定义到底在哪里找到的?我认为菲尔给出了正确的方法。事实上,我只想得到描述节点ID的不同形式。
<data>
<Element type="node" id="Node-a" name="a"/>
<Element type="node" id="Node-b" name="b"/>
<Element type="node" id="Node-c" name="c"/>
</data>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="data">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:for-each>
</xsl:template>
<xsl:template match="Element">
<xsl:element name="source">
<xsl:attribute name="node">
<xsl:value-of select="@type"/>
</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="generate-id(.)"/>
</xsl:attribute>
</xsl:element>
<xsl:element name="target">
<xsl:attribute name="node">
<xsl:value-of select="@type"/>
</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="concat(generate-id(.), '-', position())"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>