我们试图使用XSLT 1.0分别为每个节点获取唯一值。例如,
<root>
<node name="1234">
<node name="9876">
<child ln="2" name="CA1">
<CA01>10</CA01>
</child>
</node>
<node name="9876">
<child ln="2" name="CA1">
<CA01>9</CA01>
</child>
</node>
<node name="9876">
<child ln="2" name="CA1">
<CA01>10</CA01>
</child>
</node>
</node>
<node name="1234">
<node name="9876">
<child ln="2" name="CA1">
<CA01>10</CA01>
</child>
</node>
<node name="9876">
<child ln="2" name="CA1">
<CA01>5</CA01>
</child>
</node>
</node>
代码
<!-- Template called for each node 1234 -->
<xsl:for-each select="node[@name='9876']/child[@name='CA1']/CA01/text() [generate-id()
= generate-id(key('CA01Code',.)[1])]">
<xsl:value-of select="."/>
预期输出
对于第一节点1234 =&gt; 10,9
对于第二节点1234 =&gt; 10,5
但是,为每个1234节点调用时的实际输出会给出不同的输出
实际输出
对于第一节点1234 =&gt; 10,9
对于第二节点1234 =&gt;的 5
编辑带有密钥定义的XSLT
关键定义
<xsl:key name="CA01Code" match="node[@name='9876']/child[@name='CA1']/CA01/text()" use="." />
模板定义
<xsl:template match="node[@name='1234']">
<xsl:for-each select="node[@name='9876']/child[@name='CA1']/CA01/text()[generate-id() = generate-id(key('CA01Code',.)[1])]">
<xsl:value-of select="."/>
</xsl:for-each> </xsl:template>
答案 0 :(得分:0)
更改
<xsl:key name="CA01Code" match="node[@name='9876']/child[@name='CA1']/CA01/text()" use="." />
到
<xsl:key name="CA01Code" match="node[@name='9876']/child[@name='CA1']/CA01" use="concat(generate-id(ancestor::node[last()]), '|', .)"/>
然后将模板转到
<xsl:template match="node[@name='1234']">
<xsl:for-each select="node[@name='9876']/child[@name='CA1']/CA01[generate-id() = generate-id(key('CA01Code',concat(generate-id(ancestor::node[last()]), '|', .))[1])]">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>