我遇到了XPATH问题。 我有一个像这样的XML结构:
<root>
<state name="UsUed">
<transition event-source="this" event="edit()" target="UsEd_editing" />
...
</state>
<state>
<transition event-source="this" event="edit()" target="UsEd" />
<transition event-source="that" event="new()" target="SUed" />
...
</state>
</root>
我只需<transition />
和@event-source='this'
@event
即可获得<transitions />
。
我的解决方案是选择所有带有'this'属性的@event
,按<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="//transition[@event-source='this']">
<xsl:sort select="@event"/>
<xsl:if https://stackoverflow.com/questions/2812122/distinct-in-xpath>
<!--Here goes the transformation-->
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
对其进行排序,然后尝试仅选择其中不同的here
{{1}}
但它不起作用。
答案 0 :(得分:0)
要选择唯一项目,您可以使用前一轴将当前匹配与之前的匹配进行比较,以确保它们不相同。像下面这样的XPath查询应该是您选择唯一项目所需的全部内容。我假设@event属性的唯一性仅限于@event-source='this'
而非全局的其他过渡元素。
/root/state/transition[@event-source='this'][not(@event=preceding::transition[@event-source='this']/@event)]