我无法解析不规则嵌入的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
答案 0 :(得分:0)
这取决于您需要提取的内容。如果您想要字体元素中的所有文本,可以使用以下xpath:
'td/font//text()'
它提取字体标记中的所有文本节点。如果您想要单元格中的所有文本节点,那么:
'td//text()'
您也可以在Nokogiri节点上调用text
方法:
row.at_xpath(xpath).text
答案 1 :(得分:0)
我前几天为这个问题添加了答案。这是一个非常简单的过程。
看看:Convert HTML to plain text and maintain structure/formatting, with ruby