Xpath: как выбрать второй текстовый узел (конкретный текстовый узел)

рассмотреть html-страницу

<html>
apple

orange

drugs

</html>

как вы можете выбрать оранжевый с помощью xpath?

/html/text()[2]

не работает.


person pingu    schedule 18.10.2009    source источник
comment
Здесь нет нескольких текстовых узлов. У вас есть один текстовый узел, содержащий разрывы строк.   -  person Pavel Minaev    schedule 18.10.2009
comment
что, если тексты разделены через ‹br› ?   -  person pingu    schedule 18.10.2009
comment
XPath не работает с HTML — он работает с XML. Если ваш HTML на самом деле не XHTML, вы не получите хороших результатов.   -  person marc_s    schedule 18.10.2009


Ответы (2)


Вы не можете сделать это напрямую, выбрав. Вам нужно вызвать функцию строки xpath, чтобы вырезать text(), чтобы получить нужную строку

substring-after(/html/text()," ") // something like this,

вот список строковых функций

person Andrew Keith    schedule 18.10.2009

Если строки разделены <br>, это работает

  doc = Nokogiri::HTML("""<html>
  apple
  <br>
  orange
  <br>
  drugs
  </html>""")
  p doc.xpath('//text()[2]') #=> orange
person akuhn    schedule 24.11.2009