在nokogiri的两个元素之间抓取文本?

时间:2010-10-12 04:19:04

标签: ruby xpath nokogiri

<body>
 <div>some text</div>
 I NEED THIS TEXT ONLY
 <div>some text</div>
 more text here
 <div>some text</div>
 one more text here
 <div>some text</div>
</body>

如何?

4 个答案:

答案 0 :(得分:5)

使用

/*/div[1]/following-sibling::text()[1]

这将选择文档顶部元素的第一个div子元素的第一个文本节点兄弟。

答案 1 :(得分:0)

这将返回bodydiv元素中的第一个文本节点:

/body/text()[
     ./preceding::element()[1][local-name()="div"] and 
     ./following::element()[1][local-name()="div"]
][1]

应该返回

I NEED THIS TEXT ONLY

答案 2 :(得分:0)

这个XPath 1.0:

/body/text()[preceding-sibling::*[1][self::div]]
            [following-sibling::*[1][self::div]][1]

此外:

/body/text()[normalize-space()][1]

答案 3 :(得分:-1)

我没有nokogiri,但这里只使用基本的字符串操作。

html=<<EOF
<body>
 <div>some text</div>
 I NEED THIS TEXT ONLY
 <div>some text</div>
 more text here
 <div>some text</div>
 one more text here
 <div>some text</div>
</body>
EOF
p html.split(/<\/*body>/)[1].split(/<\/div>/)[1].split(/<div>/)[0]