
<td valign="top" wIDth="350"> <br><h2>nameIWant</h2><br> <br>Town<br> PhoneNumber<br> <a href="mailto:emailiwant@Nowhere.com" >emailiwant@Nowhere.com</a> <br> <a href="http://websiteIwant.com" >websiteIwant.com</a> <br><br> <br><img src="images/spacer.gif"/><br> <h3><b>I want to stop before this!</b></h3> Lorem Ipsum Yadda Yadda<br> <img src="images/spacer.gif" border="0" wIDth="20" height="11" alt=""/><br> <td wIDth="25"> <img src="images/spacer.gif" border="0" wIDth="20" height="8" alt=""/> <td valign="top" wIDth="200"><img src="images/spacer.gif"/> <br> <br> <table cellspacing="0" cellpadding="0" border="0"/>205"><tr><td> <a href="http://dontneedthis.com"> </a></td></tr><br> <table border="0" cellpadding="3" cellspacing="0" wIDth="200"> ...
< td valign>直到页面的最底部才关闭,我认为这可能是我遇到问题的原因.
我的Ruby代码看起来像:
require 'open-uri'require 'nokogiri'@doc = Nokogiri::XML(open("http://www.url.com"))content = @doc.CSS('//td[valign="top"] [wIDth="350"]')name = content.xpath('//h2').textputs name // Returns nameIwanttownNumberlinks = content.search('//following::h2')puts content // Returns <h2> nameIWant </h2> 据我所知,遵循语法应该“在当前节点的结束标记之后选择文档中的所有内容”.如果我尝试使用前面的:
townNumberlinks = content.search('//preceding::h3')// I get: <h3><b>I want to stop before this!</b></h3> 希望我明确表达了我想要做的事情.谢谢!
解决方法 这不是微不足道的.在您选择的节点(td)的上下文中,要获取两个元素之间的所有内容,您需要执行这两个集合的交集:>集合A:第一个h3之前的所有节点:// h3 [1] / preceding :: node()
> Set B:第一个h2:// h2 [1] / following :: node()之后的所有节点
要执行交叉路口,您可以使用Kaysian method(Michael Kay之后,谁提出它).基本公式是:
A[count(.|B) = count(B)]
将它应用于您的集合,如上所定义,其中A = // h3 [1] / preceding :: node()和B = // h2 [1] / following :: node(),我们有:
//h3[1]/preceding::node()[ count( . | //h2[1]/following::node()) = count(//h2[1]/following::node()) ]
这将选择从第一个< br>开始的所有元素和文本节点.在< / h2>之后标记,到最后一个< br>之后的空白文本节点,就在下一个< h3>之前.标签.
您可以轻松选择h2和h3之间的文本节点,替换表达式中text()的node().这个将返回两个标头之间的所有文本节点(包括空格和换行符):
//h3[1]/preceding::text()[ count( . | //h2[1]/following::text()) = count(//h2[1]/following::text()) ]总结
以上是内存溢出为你收集整理的html – Nokogiri和Xpath:找到两个标签之间的所有文本全部内容,希望文章能够帮你解决html – Nokogiri和Xpath:找到两个标签之间的所有文本所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)