我正在使用<xsl:key>
来识别一组节点中的唯一值。但是,我的一些节点是嵌套的,而我当前的实现并未获取这些值。
假设我有以下XML结构:
<Concepts>
<Concept>
<Type>A</Type>
</Concept>
<Concept>
<Type>B</Type>
</Concept>
<Concept>
<OR>
<Type>C</Type>
</OR>
<OR>
<Type>D</Type>
</OR>
</Concept>
</Concepts>
我目前正在使用以下XSLT1.0代码:
<xsl:key name="types" match="Concepts/Concept" use="Type"/>
<xsl:template match="/">
<ul>
<xsl:for-each select="//Concept[generate-id() = generate-id(key('types',Type)[1])]">
<li><xsl:value-of select="Type"/></li>
</xsl:for-each>
</ul>
</xsl:template>
结果是:
但是,我希望结果是:
有没有简单的解决方案,还是我必须重构我的XML?
答案 0 :(得分:2)
尝试将密钥更改为:
<xsl:key name="types" match="Type" use="."/>
然后你的xsl:for-each
到此......
<xsl:for-each select="//Type[generate-id() = generate-id(key('types',. )[1])]">
这应该给你不同的类型。您还必须将<xsl:value-of select="Type"/>
更改为xsl:value-of select="."/>
注意,如果您的XML中有其他Type
元素,但您只想要Concept
元素中的元素,那么您也可以这样做....
<xsl:key name="types" match="Type[ancestor::Concept]" use="."/>