[翻訳]XPath と CSS セレクター
原文: http://ejohn.org/blog/xpath-css-selectors
最近、私は XPath と CSS 3 の両方をサポートするパーサーを実装するために多くの作業を行ってきました。私が驚いたのは、これらはある点では非常に似ていて、別の点ではまったく異なるということです。違いは、CSS を使用して HTML を操作できること、#id を使用して ID に基づいて要素を取得できること、および .class を使用して要素を取得できることです。クラスに基づいて要素を取得します。一方、XPath を使用して実装すると、DOM ツリーの上位ノードに戻ることができ、また、foo[bar] を使用して要素を取得することもできます。 bar サブ要素を持つ foo 要素では、CSS セレクターはこれをまったく行うことができません。 要約すると、CSS セレクターは通常は短いですが、残念ながら、これら 2 つのオプションは十分強力ではないと思います。デバイスの記述方法を比較することは非常に価値があります。
ターゲット | CSS 3 | XPath | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
すべての要素 | * | //* | ||||||||||
すべてのP要素 | p | //p | ||||||||||
すべての p 要素 子要素 | p > * | //p/* | ||||||||||
IDに基づいて要素を取得 | #foo | //*[@id='foo'] | ||||||||||
クラスに基づいて要素を取得します | .foo | //*[@ title] | ||||||||||
すべてのP要素の最初の子要素 | p *:第一子 | //p/*[ 0] | ||||||||||
子 | Unachievable | を持つすべての P 要素//p[a] | ||||||||||
次の兄弟要素 p + * | //p/following-sibling::*[0 ] |
class="foobar foo bar" | //*[@class =' foo '] | |
class="foo bar" | ||
Inクラス属性値、foo は左端にあります
| class="bar foo" | //*[substring(@class,string-length(@class)-3)=' foo'] |
。 |