Ruby:使用XPath,获取匹配的字符串索引?

时间:2013-12-23 23:21:35

标签: ruby xpath

是否可以通过执行XPath搜索来获取返回的所有匹配项的字符串索引?

例如,如果我这样做:

doc = Nokogiri::HTML(htmlSource)

doc.xpath('//meta[case_insensitive_equals(@name,"author")]', XpathFunctions.new)

它为我提供了匹配的所有元素。但是如何获得每个匹配的字符串索引?换句话说,元素开始的整个HTML源的索引?

示例输入:

<HTML><meta name="author" content="test"></HTML>

示例输出: 我想要索引6,因为那是元标记开始的地方

1 个答案:

答案 0 :(得分:1)

字符串索引?号线指数?是的,但是,有一点需要注意:XML和HTML不是基于行的格式。行号对他们没有多大意义,因此,虽然你可以得到一个行号,但你可能会发现一个文档只有一行,你知道这个号码也不错。

以下是使用http://www.example.com获取第一个<p>代码的行号的快速测试:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.example.com/'))
first_p = doc.at('p')
first_p.line # => 45
first_p.to_html 
# => "<p>This domain is established to be used for illustrative examples in documents. You may use this\n    domain in examples without prior coordination or asking for permission.</p>"

一旦你知道标签在哪一行,就可以通过在文档中搜索该行来搞乱它。

但是,为什么?如果你想修改这条线,可以使用Nokogiri的replace方法轻松完成。如果您只想提取该行的那一部分,可以使用to_html轻松完成。