2013-01-15 129 views
0

我有XPATH的问题。 我structred像这样的XML:XPATH 1.0复杂选择具有不同的两个参数

<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 />与“本”的属性,通过@event对其进行排序,然后尝试选择像here

<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> 

他们的唯一不同的人,但它不工作。

回答

0

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

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

非常感谢。 – user1981531

相关问题