我正在学习如何使用nokogiri gem在ruby中编程。
doc.xpath("//*[@class='someclass']//@href")
将返回" someclass"下的所有href值。 HTML中的某个类。
doc.xpath("//*[@class='someclass']").xpath("//@href")
将返回整个HTML中的所有href。
有人可以向我解释如何在解析数据中使用// @ equivalent in xpath,例如:
doc.xpath("//*[@class='someclass']").xpath(grab all the href within previously parsed)
可能吗?
使用*,@似乎相当强大,但我似乎无法缩小范围,除了搜索整个HTML,无论我使用它...
作为初学者,我只是觉得它会直观吗?能够使用"从任何地方抓取"语法类型仅限于先前已解析的内容以缩小目标范围,因此我可以执行类似
的操作xpath(whatever).css(whatever).xpath(whatever)
也许这不是一个好习惯?也许更了解解析概念我永远不会这样做?有时我发现使用xpath和CSS更容易..
希望有人可以启发我..答案 0 :(得分:1)
尝试从
更改第二个表达式doc.xpath("//*[@class='someclass']").xpath("//@href")
到
doc.xpath("//*[@class='someclass']").xpath(".//@href")
XPath表达式开头的 //
表示“文档根的后代”,而.//
表示“上下文节点的后代”。
你是对的,XPath是强大的,它的一些主要方面是直观的...但有一些重要的部分不直观,或取决于你的直觉是如何训练的。仔细研究会带来好处,特别是如果你要使用XPath那么多!