我有这个输入:
<r>
<x>
<s>
<a u="1"/>
<a u="2"/>
</s>
<t>
<a u="1"/>
<a u="4"/>
</t>
</x>
<y>
<a u="4"/>
<a u="5"/>
<a u="4"/>
<a u="1"/>
</y>
</r>
我尝试使用此xpath按其@u属性值
过滤所有元素/r/x//a[not(@u=preceding-sibling::node()/@u)]
预期的输出/结果是:
Element='<a u="1"/>'
Element='<a u="2"/>'
Element='<a u="4"/>'
但我明白了:
Element='<a u="1"/>'
Element='<a u="2"/>'
Element='<a u="1"/>'
Element='<a u="4"/>'
当前兄弟对父结构中的兄弟姐妹进行评估时,我需要告诉他来评估一组给定节点上的表达式,即/r/x//a
的结果。
答案 0 :(得分:0)
假设XSLT 2或3(例如Saxon 9在Java和.NET平台上支持),您可以使用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:for-each-group select="//a" group-by="@u">
<xsl:copy-of select="."/>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
并获取
<a u="1"/>
<a u="2"/>
<a u="4"/>
<a u="5"/>