Nokogiri находят текст в абзацах

Я хочу заменить inner_text во всех абзацах в моем документе XHTML.

Я знаю, что могу получить весь текст с Nokogiri как это

doc.xpath("//text()")

Но я хочу, только воздействуют на текст в абзацах, как я могу выбрать весь текст в абзацах, не влияя на в конечном счете существующие тексты привязки в ссылках?

#For example : <p>some text <a href="/">This should not be changed</a> another one</p>
5
задан astropanic 9 May 2010 в 16:22
поделиться

1 ответ

Для текста, который является непосредственным потомком абзаца, используйте // p / text ()

irb> h = '<p>some text <a href="/">This should not be changed</a> another one</p>'
=> ...
irb> doc = Nokogiri::HTML(h)
=> ...
irb> doc.xpath '//p/text()'
=> [#<Nokogiri::XML::Text:0x80ac2e04 "some text ">, #<Nokogiri::XML::Text:0x80ac26c0 " another one">]

Для текста, который является потомком (непосредственным или нет) использования абзаца // p // text (). Чтобы исключить те тексты, у которых якорь является родительским, вы можете просто вычесть их.

irb> doc.xpath('//p//text()') - doc.xpath('//p//a/text()')
=> [#<Nokogiri::XML::Text:0x80ac2e04 "some text ">, #<Nokogiri::XML::Text:0x80ac26c0 " another one">]

Вероятно, есть способ сделать это с помощью одного вызова, но мои знания xpath не настолько глубоки.

6
ответ дан 14 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: