Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT:定义节点id_Xml_Xslt - Fatal编程技术网

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>