Получение XPath-селектора для вывода текста родительского и дочернего элемента - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть такой тег HTML:

<html>
  <body>
      <h1>This is a <b>xyz</b> test</h1>
  </body>
</html>

Если я сделаю hxs.select('/html/body/h1/text()').extract(), результат будет This is a test. Как мне указать XPath, чтобы вывод был This is a xyz test.

Ответы [ 4 ]

3 голосов
/ 08 февраля 2012

Попробуйте сделать /html/body/h1//text(). Двойная косая черта найдет все спуски узла, не обязательно дочерние элементы

1 голос
/ 08 февраля 2012

Каждый узел, выбранный выражением XPath, имеет соответствующее строковое значение. От спецификации :

Строковое значение узла элемента - это конкатенация строковые значения всех потомков текстового узла узла элемента в заказ документов.

Что именно то, что вы хотите. Это строковое значение часто используется неявно, но вы можете явно получить его с помощью функции string. Опять спецификация :

Строковая функция преобразует объект в строку следующим образом:

  • Набор узлов преобразуется в строку, возвращая строковое значение узел в наборе узлов, который является первым в порядке документа. Если набор узлов пуст, возвращается пустая строка.

Используйте это так:

string(/html/body/h1)
1 голос
/ 08 февраля 2012

Возможно, вам нужна функция string .

string(/html/body/h1)
0 голосов
/ 08 февраля 2012

Вам нужно только написать: '/html/body/h1'.С помощью функции text() вы выбираете текстовые узлы, которые являются потомками h1 (xyz - нет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...