XPath只选择第一级节点,无论它们在层次结构中的位置如何

时间:2014-10-03 10:42:25

标签: xpath

我有xls数据,如下面的代码。 如何只选择class =" aaa"的第一级节点属性?

我不能使用这样的东西" // * [@ class =' aaa']",因为它也会选择2级。

也不能像" / root / div / div [@class =' aaa']那样直接放置路径,因为层次结构内的节点位置可能会有所不同。

有没有办法只选择第一级节点而不管它们在层次结构中的位置?

<root>
<div>
  <!-- level 1 -->
  <div class="aaa">
    <div>
      <!-- level 2 -->
      <div class="aaa">
      </div>
    </div>

    <div>
      <div>
        <!-- level 2 -->
        <div class="aaa">
        </div>
      </div>
    </div>
  </div>
</div>

<div>
  <div>
    <div>
      <div>
        <div>
          <!-- level 1 -->
          <div class="aaa">
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
</root>

2 个答案:

答案 0 :(得分:3)

一个可能的XPath:

//div[@class='aaa' and not(ancestor::div[@class='aaa'])]

基本上在XPath之上选择<div> class等于"aaa"没有祖先<div>class等于"aaa" ,换句话说,<div>最外层class等于"aaa"

答案 1 :(得分:0)

.//div[@class='aaa' and not(ancestor::div[@class='aaa']) and not(ancestor::div = self::node())]
相关问题