2015-10-01 5 views
1

У меня есть XML, как это,Xpath - Выберите узлы путем поиска следующих братьев

<chap> 
    <p>aaa</p> 
    <h1>bbb</h1> 
    <p>ccc</p> 
    <p>ddd</p> 
    <h1>eee</h1> 
    <p>fff</p> 
    <h2>ggg</h2> 
    <p>hhh</p> 
    <h1>iii</h1> 
    <p>jjj</p> 
    <h1>kkk</h1> 
    <p>lll</p> 
    <h1>mmm</h1> 
    <p>nnn</p> 
    <h2>ooo</h2> 
    <h1>ppp</h1> 
    <p>qqq</p> 
</chap> 

нужно выбрать h1 узлы, которые при переходе вниз по дереву XML первый следующий-родственный ч узел находку является h1 узел. если первое обнаружение следующего брака составляет h2, то не следует выбирать h1.

так над XML

<h1>bbb</h1> 
<h1>iii</h1> 
<h1>kkk</h1> 
должны быть выбраны

узлы.

Как написать запрос xpath для выбора выше узлов из xml?

Xpath version is 2.0 

ответ

3

Это один из возможных XPath 1.0 совместим выражение:

/chap/h1[following-sibling::*[starts-with(name(),'h')][1][self::h1]] 

краткое описание:

  • /chap/h1: найти все h1, что является прямым потомком корневого элемента chap
  • following-sibling::*[starts-with(name(),'h')][1]: найти ближайший следующий родственный элемент, имеющий name() начинается с h ...
  • [self::h1]: ... и найденный элемент h1
Смежные вопросы