0

HTML ページからコンテンツを取得しようとしています。ここでは、HTML をいくつかのパーツに分割し、Nokogiri を使用して各サブパーツを解析します。

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が一致しないのでしょうか。Nokogiri::HTML変数用に新しいdiv変数を作成しますか (多くのサブパーツを含む大きなドキュメントにこれを使用すると、パフォーマンスの問題になる可能性があります)。<div>または、ルート要素ではない別の要素でラップしますか?

4

1 に答える 1

1

//xpath ではルートから意味します。..//...を発行しても、xpath 式はルートから要素を検索します。div.at_xpath

一方、タグdiv.at_cssから見つける; div歯が立たない。

div > h3//div/h3[1](css) は(xpath)とは異なります。

div > h3.//div/h3[1](css) は(xpath)に似ています。

于 2013-07-26T09:04:41.137 に答える