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