XPath выберите внутренний текст - PullRequest
5 голосов
/ 06 октября 2010

У меня есть этот HTML / XML:

\t\t\t\t\t    \r\n\t\t
<a href="/test.aspx">
  <span class=test>
    <b>blabla</b>
  </span>
</a>
<br/>
this is the text I want
<br/>
<span class="test">
  <b>code: 123</b>
</span>
<br/>
<span class="test"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t

В C # 4 я использую lib HtmlAgilityPack, чтобы выбрать узел с XPath и получить свойство InnerText. Это получит весь текст внутри узла. Как я могу получить только текст «это текст, который я хочу»?

/text() только возвращает \t\t\t\t\t \r\n\t\t

Ответы [ 3 ]

11 голосов
/ 06 октября 2010
/div/text()

Из приведенного примера этот XPath предоставит вам все текстовые узлы под элементом div, в данном случае test2.

Если бы вы могли более подробно остановиться на этом вопросе, мы могли бы лучше помочь вам. Div содержит 3 дочерних элемента: элемент span, текстовый узел и элемент b. Каждый из span и b имеет дочерний текстовый узел. Используя XPath, вы можете выбирать только элементы (/ div / *), только текстовые узлы (/ div / text ()) или все типы узлов (/ div / node ()).

EDIT: / text () вернет вам только текстовые узлы корневого уровня. В этом случае я ожидаю, что он вернет список узлов, содержащий 3 текстовых узла:

\t\t\t\t\t    \r\n\t\t 
this is the text I want
\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t

Возможно, вы выбираете только первый узел в списке результирующих узлов? Есть несколько проблем правильной формы, например, <br> должно быть <br/>.

1 голос
/ 06 октября 2010

@ peter: Вы не должны редактировать свой вопрос так, чтобы люди не видели, как принятый ответ относится к вопросу !!!

Ответ на ваш новыйвопрос:

/br[1]/following-sibling::text()[1]

выбирает нужный текстовый узел (цитаты мои):

"   
this is the text I want   
"
0 голосов
/ 06 октября 2010

Как получить только текст «это текст, который я хочу»?

text()[preceding-sibling::node()[1][self::br]]
      [following-sibling::node()[1][self::br]]

Значение: текстовый узел между двумя br элементами.

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