【发布时间】:2011-05-22 21:59:10
【问题描述】:
我无法解析不规则嵌入的 html 标签。有没有办法从节点中删除所有 html 标签并保留所有文本?
我正在使用代码:
rows = doc.search('//table[@id="table_1"]/tbody/tr')
details = rows.collect do |row|
detail = {}
[
[:word, 'td[1]/text()'],
[:meaning, 'td[6]/font'],
].collect do |name, xpath|
detail[name] = row.at_xpath(xpath).to_s.strip
end
detail
end
使用 Xpath:
[:meaning, 'td[6]/font']
生成
:meaning: ! '<font size="3">asking for information specifying <font
color="#CC0000" size="3">what is your name?</font> /what/ as in, <font color="#CC0000" size="3">I'm not sure what you mean</font>
/what/ as in <a style="text-decoration: none;" href="http://somesecretlink.com">what</a></font>
另一方面,使用 Xpath:
'td/font/text()'
生成
:meaning: asking for information specifying
因此忽略节点的所有子节点。我想要实现的是这个
:meaning: asking for information specifying what is your name? /what/ as in, I'm not sure what you mean /what/ as in what? I can't hear you
【问题讨论】:
-
我看不到第一个字体标签在哪里关闭。你试过 at('td/font').text 吗?
-
Roman,我更正了输出。它确实会生成关闭字体标签。
-
好的,你试过 row.at_xpath('td[6]/font').text 吗?
-
谢谢罗曼。你没看错 - .text 是正确答案的组成部分之一。
标签: ruby parsing internationalization nokogiri