Xpath计数功能澄清

时间:2014-02-21 14:23:43

标签: xpath count

我想知道为什么以下Xpath表达式的计数为2而不是3.感谢您的帮助。

的Xpath -

<xsl:value-of select="count(//x[1]/y[1])"/>

XML

<?xml version="1.0"?>
<test>
    <x a="1">
      <x a="2">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>
    <x a="1">
      <x a="2">
        <y>y21</y>
        <y>y22</y>
      </x>
    </x>
    <x a="1">
      <y>y11</y>
      <y>y12</y>
    </x>
    <x>
      <y>y03</y>
      <y>y04</y>
    </x>
</test>

//count (//x[1]/y[1]) is selecting the following 2 elements.

1) <x>
      <y>y31</y>

2) <x a="2">
        <y>y21</y>

并且它没有选择同一级别中的以下元素之一,将计数添加为3.我想澄清一下。

<x a="1">
      <y>y11</y>


      or 

    <x>
      <y>y03</y>

感谢, 马修

1 个答案:

答案 0 :(得分:0)

//x[1]/y[1]选择y元素作为1个孩子或其父母的x个元素的第一个子元素。

test

的第一个孩子
<x a="1">
  <x a="2">       <!-- x is first child of its parent -->
    <y>y21</y>    <!-- y is first child of its parent x -->
    <y>y22</y>
  </x>
</x>

和第二个孩子或test

<x a="1">
  <x a="2">
    <x>            <!-- x is first child of its parent -->
      <y>y31</y>   <!-- y is first child of its parent x -->
      <y>y32</y>
    </x>
  </x>
</x>

两者都是或包含x元素,其本身具有x元素作为第一个孩子,y作为第一个孩子,因此匹配。

<x a="1">          <!-- x is 3rd child of its parent test -->
      <y>y11</y>
      ...

test

的第3个孩子
<x>               <!-- x is 4th child of its parent test -->
      <y>y03</y>

test

的第4个孩子

所以他们不匹配