XPath - 验证当前节点是否具有相同的兄弟节点值

时间:2015-06-05 11:04:51

标签: xml xpath

在XPath 1.0中,有没有办法验证当前节点值是否具有相同的兄弟值?

例如,Name中的Item3会返回trueName中的Item2会返回false

<Item1>
  <Name>Name1</Name>
  <Id>123</Id>
</Item1>
<Item2>
  <Name>Name2</Name>
  <Id>124</Id>
</Item2>
<Item3>
  <Name>Name1</Name>
  <Id>125</Id>
</Item3>

2 个答案:

答案 0 :(得分:2)

假设当前上下文元素是ItemX元素之一,您可以使用以下内容:

self::*[Name=following-sibling::*/Name or Name=preceding-sibling::*/Name]
如果存在具有相同ItemX值的同级Name元素,则xpath上方的

返回当前上下文元素,否则返回任何内容。

答案 1 :(得分:0)

<xsl:template match="Name">
    <!-- make the evaluation -->
    <xsl:variable name="curname" select="text()"/>
    <xsl:variable name="multiple" select="count(//Name[text()=$curname]) &gt; 1"/>

    <!-- show result -->
    <xsl:value-of select="../Name[1]"/>
    <xsl:if test="$multiple"> MULTIPLE</xsl:if>
    <xsl:if test="not($multiple)"> SINGLE</xsl:if>
</xsl:template>