Ruby 如何从nokogiri对象获取标识符(例如xpath)?
遍历nokogiri并使用xpath选择元素相当容易。我需要反过来,意思是:我需要调用nokogiri节点上的Ruby 如何从nokogiri对象获取标识符(例如xpath)?,ruby,ruby-on-rails-3,xpath,nokogiri,Ruby,Ruby On Rails 3,Xpath,Nokogiri,遍历nokogiri并使用xpath选择元素相当容易。我需要反过来,意思是:我需要调用nokogiri节点上的.to_xpath,以获取元素的完整xpath,并将其存储在记录中 有人知道这样做的方法吗?我能想到的最简单的事情是,使用它构建一个元素路径,返回到根(即返回到),并在每个节点上计算该节点在其同级节点中的数字索引。由于只有一个和(如有必要,Nokogiri会在你背后为你添加这些),一旦你点击节点,你就可以停止向父母走去 算法如下所示: <ul><li>a</
.to_xpath
,以获取元素的完整xpath,并将其存储在记录中
有人知道这样做的方法吗?我能想到的最简单的事情是,使用它构建一个元素路径,返回到根(即返回到
),并在每个节点上计算该节点在其同级节点中的数字索引。由于只有一个
和
(如有必要,Nokogiri会在你背后为你添加这些),一旦你点击
节点,你就可以停止向父母走去
算法如下所示:
<ul><li>a</li><li><b>b<em>c</em></b></li></ul>
path=[]
,n
是您已经拥有的节点s=n
并调用s=s.previous_元素
直到s.nil?
并计算您进行了多少次迭代,这将为您提供n
在其同级中的位置。将位置置于索引中
。请记住,XPath位置是基于一个的path.unshift('*['+index.to_s+']')
p=n.parent
,如果p
不是
,则n=p
并返回步骤2path.unshift('body')。unshift('html')
XPath='/'+path.join('/')
<ul><li>a</li><li><b>b<em>c</em></b></li></ul>
不完全是漂亮的,但至少过程相当简单,结果XPath将是唯一的
如果需要指向DOM中大多数节点的路径,那么可以从根节点开始,并对向下的所有节点编号。这样你就可以避免一次又一次地和兄弟姐妹散步。我能想到的最简单的方法是: Nokogiri::CSS.xpath_用于node.CSS_路径
EDIT:您也可以尝试一下
path
方法。XML还是HTML?你所有的节点都有id
属性吗?这是html,它们没有任何id节点,因为使用了自定义html标记,这些标记会被动态替换和倍增。你可能想使用Serabe的,但无论如何我都会留下我的。很抱歉,如果我的隧道视野让你做了比必要的更多的工作。无论如何,感谢你的详细解决方案,尽管我喜欢它。在文档中也找不到我需要的内容:)@pduersteler:您可能想添加一些测试,以确保正确获得0/1/多个兄弟姐妹的编号。谢谢。Nokogiri是一个很好的库,它提供了几乎所有你能想到的方法。只要看到css_路径也会起作用,这可能会加快速度。谢谢