是否可以通过执行XPath搜索来获取返回的所有匹配项的字符串索引?
例如,如果我这样做:
doc = Nokogiri::HTML(htmlSource)
doc.xpath('//meta[case_insensitive_equals(@name,"author")]', XpathFunctions.new)
它为我提供了匹配的所有元素。但是如何获得每个匹配的字符串索引?换句话说,元素开始的整个HTML源的索引?
示例输入:
<HTML><meta name="author" content="test"></HTML>
示例输出: 我想要索引6,因为那是元标记开始的地方
答案 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
轻松完成。