0
我试图从HTML页面获取一些内容。在这里我将HTML分成几个部分,并使用Nokogiri解析每个子部分。CSS与Nathogiri中的XPath不匹配
当我使用CSS选择器不辅助部分,其中的XPath选择不匹配:
#!/usr/bin/ruby
require 'nokogiri'
# construct simple HTML
doc = Nokogiri::HTML('<div><h3>Heading</h3></div>')
puts doc, "\n"
# get the div
div = doc.at_css('div')
puts div, "\n"
# get heading using XPath and CSS. CSS doesn't match!
puts "XPath: ", div.at_xpath('//div/h3[1]') || "no match"
puts "CSS: ", div.at_css('div > h3') || "no match"
输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div><h3>Heading</h3></div></body></html>
<div><h3>Heading</h3></div>
XPath:
<h3>Heading</h3>
CSS:
no match
正如你可以看到有不匹配的CSS部分。那么为什么表达式div > h3
不匹配?我应该为div
变量创建一个新的Nokogiri::HTML
(如果我将此用于包含多个子部分的大型文档,性能问题可能会出现)?或者用另一个元素包装它,以便<div>
不是根元素?
感谢您对根元素的解释。使用'div.parent.at_css('div> h3')'它起作用,因为它考虑'
'元素作为起点。 – arnep@arnep,'div.at_css('> h3')'也适用。 – falsetru