XPATH 1.0复杂选择具有两个不同的参数

时间:2013-01-15 20:44:31

标签: xslt xpath

我遇到了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}}

但它不起作用。

1 个答案:

答案 0 :(得分:0)

要选择唯一项目,您可以使用前一轴将当前匹配与之前的匹配进行比较,以确保它们不相同。像下面这样的XPath查询应该是您选择唯一项目所需的全部内容。我假设@event属性的唯一性仅限于@event-source='this'而非全局的其他过渡元素。

/root/state/transition[@event-source='this'][not(@event=preceding::transition[@event-source='this']/@event)]