为什么 Nokogiri 找不到这个 img 标签?
Why is Nokogiri not finding this img tag?
我开始于:
text = "Dear Harry,<div>Hope all is well with you in the current strange times, and that you are not suffering too much in isolation.Look what I just got delivered:<img class=\"small\" src=\"s\"></div>"
我把它解析成Nokogiri片段:
f = Nokogiri::HTML::DocumentFragment.parse(text)
但是,下面两个return空列表:
f.xpath('//img')
f.xpath('img')
我也不知道为什么。
但是,我可以找到这样的 img 标签:
f.xpath('*')[0].xpath('img')
=> [#<Nokogiri::XML::Element:0x3fd63d7731cc name="img" attributes=[#<Nokogiri::XML::Attr:0x3fd63d772c68 name="class" value="small">, #<Nokogiri::XML::Attr:0x3fd63d772c54 name="src" value="s">]>]
我以为 '//img'
是为了进行递归搜索?
片段找不到具有预期 xpath 表达式的元素似乎是一个悬而未决的问题...
https://github.com/sparklemotion/nokogiri/issues/572
但这会起作用...
f.xpath('.//img')
我大部分时间都避免使用 XPath。 CSS 更具可读性,适用于我们所做的大部分事情:
require 'nokogiri'
text = 'foo<div>bar<img class="small" src="s"></div>'
fragment = Nokogiri::HTML::DocumentFragment.parse(text)
fragment.at('img').to_html
# => "<img class=\"small\" src=\"s\">"
或者,使用常规解析成完整文档,然后 CSS 或 XPath 都可以:
doc = Nokogiri::HTML(text)
doc.at('img').to_html # => "<img class=\"small\" src=\"s\">"
doc.at('//img').to_html # => "<img class=\"small\" src=\"s\">"
//...
在 XPath 中是递归搜索,它从文档的顶部开始并下降。
我开始于:
text = "Dear Harry,<div>Hope all is well with you in the current strange times, and that you are not suffering too much in isolation.Look what I just got delivered:<img class=\"small\" src=\"s\"></div>"
我把它解析成Nokogiri片段:
f = Nokogiri::HTML::DocumentFragment.parse(text)
但是,下面两个return空列表:
f.xpath('//img')
f.xpath('img')
我也不知道为什么。
但是,我可以找到这样的 img 标签:
f.xpath('*')[0].xpath('img')
=> [#<Nokogiri::XML::Element:0x3fd63d7731cc name="img" attributes=[#<Nokogiri::XML::Attr:0x3fd63d772c68 name="class" value="small">, #<Nokogiri::XML::Attr:0x3fd63d772c54 name="src" value="s">]>]
我以为 '//img'
是为了进行递归搜索?
片段找不到具有预期 xpath 表达式的元素似乎是一个悬而未决的问题...
https://github.com/sparklemotion/nokogiri/issues/572
但这会起作用...
f.xpath('.//img')
我大部分时间都避免使用 XPath。 CSS 更具可读性,适用于我们所做的大部分事情:
require 'nokogiri'
text = 'foo<div>bar<img class="small" src="s"></div>'
fragment = Nokogiri::HTML::DocumentFragment.parse(text)
fragment.at('img').to_html
# => "<img class=\"small\" src=\"s\">"
或者,使用常规解析成完整文档,然后 CSS 或 XPath 都可以:
doc = Nokogiri::HTML(text)
doc.at('img').to_html # => "<img class=\"small\" src=\"s\">"
doc.at('//img').to_html # => "<img class=\"small\" src=\"s\">"
//...
在 XPath 中是递归搜索,它从文档的顶部开始并下降。