使用引入nokogiri获取两个标记之间的文本
问题描述:
我的HTML结构使用引入nokogiri获取两个标记之间的文本
<div class="line">
<h2>Header</h2>
<h3>Mailing Address</h3>
2349 Glorem ipsun lorem ipsum CA 95833<br>
<br>
Phone: 111-111-2111 Fax: 111-511-1111<br>
<a onfocus="blur()" target="_blank"" href="">some text</a><br>
<a onfocus="blur()" target="_blank" href="">some address</a><br>
<div><p></p></div>
<h3>Contact(s)</h3>
</div>
的HTML页面包含几个<div class=line></div>
元素。对于每个div我需要提取电话和传真与其他数据的数组。我试过使用
doc.css("div#ctl00_cphContent_divBrowseByMember").each do |div|
div.css("div.line").each do |line|
line.xpath('//text()[preceding-sibling::br and following-sibling::a]').text.strip
end
end
它什么都不返回并返回超时错误。 如果我尝试 line.xpath('//text()[preceding-sibling::br and following-sibling::a]')[0].text.strip
将返回所有其他div相同的电话和传真。请建议任何其他解决方案,这将帮助我。
答
最简单的办法:
phone, fax = line.text.scan /\d{3}-\d{3}-\d{4}/
谢谢。它的工作原理 – Raji 2012-07-14 10:47:09
不客气:) – pguardiario 2012-07-14 11:29:18
根据你的问题,使用正则表达式来解析HTML/XML是愚蠢的错误。我不知道你是否可以控制这个文档的HTML,但是如果你正在处理一个表格行,解析会更容易和更一致。这个HTML格式不好的线索是它有' '在里面。多个“
”也是一个不好的迹象,往往不是。 – lyonsinbeta 2012-07-14 14:06:16