nokogiri: почему это неверный xpath? - PullRequest
6 голосов
/ 11 октября 2009
//br/preceding-sibling::normalize-space(text())

я получаю неправильное выражение xpath с nokogiri

1 Ответ

10 голосов
/ 11 октября 2009

normalize-space - это функция. Вы не можете использовать его там.
Вам нужен набор узлов.

может быть, вы имеете в виду

//br/preceding-sibling::*

или вы можете использовать normalize-space в предикате внутри квадратных скобок. Думайте о предикате как о фильтре или селекторе в наборе узлов. Так что вы можете сделать это:

//br/preceding-sibling::*[normalize-space()='Fred']

На английском языке, что переводится как «все элементы, предшествующие <br> в документе, и для которого (нормализованный) текст -« Fred »». В этом документе:

<html>
  <p>
    <h2>Fred</h2>
    <br/>
  </p>
  <table>
    <tr>
      <td>
        <br/>
      </td>
    </tr>
  </table>
</html>

... выражение xpath выбирает узел <h2>.

Я понял это с помощью бесплатного инструмента XpathVisualizer, доступного в codeplex .

enter image description here

...