XPath テスター

最大100万文字の XML または HTML を貼り付けてください。評価はこのブラウザ内で XPath 1.0 により行われます。

絶対または相対の XPath 1.0 式。ドキュメントで宣言されたプレフィックスは自動的に登録されます。デフォルト名前空間はプレフィックス d で参照できます。

スクレイピングや XSLT 向けの XPath は、その場で試せるサンドボックスがないと当て推量と確認の繰り返しになりがちです。このテスターは、一方のペインに XML または HTML を、もう一方に式を受け取り、ブラウザ自身のエンジンで XPath 1.0 を評価して、一致したすべてのノードを種類、属性、テキスト内容、シリアライズされたマークアップとともに一覧表示します。count(//book) のようなスカラー式は値を直接返し、ドキュメントで宣言された名前空間プレフィックスは自動的に登録されます。すべてブラウザ内で実行され、ドキュメントがアップロードされることはありません。

XPath 式のテスト方法

  1. 1

    XML または HTML を貼り付ける

    自動検出は、HTML の doctype やルート要素を見つけると寛容な HTML 解析に切り替わります。XML モードまたは HTML モードを強制することもできます。

  2. 2

    XPath を入力する

    `/library/book` のような絶対形式でも `//div[@class='card']` のような相対形式でも、XPath 1.0 の式なら何でも使えます。

  3. 3

    評価する

    ブラウザ自身の XPath エンジンがクエリをローカルで実行します。サーバーには何も送信されません。

  4. 4

    結果を確認する

    一致ごとにノードの種類、属性、前後の空白を除いたテキスト、シリアライズされたマークアップが表示されます。一覧表示は最大200件までです。

XPath 1.0 の基本

一致する対象
/books/book ルート <books> の子である <book>
//book ドキュメント内のあらゆる場所の <book>
//book[@id='42'] id 属性が 42 の <book>
//book[1] 各親の中で最初の <book>(ドキュメント全体ではない)
(//book)[1] ドキュメント全体で最初の <book>
//book[title='1984'] <title> のテキストが「1984」の <book>
//book/@id すべての <book> 要素の id 属性
//book[position() > 1] 最初のものを除くすべての <book>
//book[last()] 親ごとに最後の <book>

スカラー式も使えます。count(//book) は数値を、string(//title) は文字列を、boolean(//book[@id]) は true または false を返します。テスターはこれらの値を、ノード一覧の代わりにそのまま表示します。

child 以外の主な軸

  • ancestor::、すべての祖先
  • following-sibling::、現在のノードより後の兄弟
  • preceding-sibling::、現在のノードより前の兄弟
  • descendant::、すべての子孫
  • attribute::(短縮形 @)、現在のノードの属性
  • parent::(短縮形 ..)、親要素

HTML の癖

HTML は厳密な XML ではないため、このテスターは厳密な XML パーサーではなく、ブラウザの HTML パーサーで寛容に解析します。HTML モードは <!DOCTYPE html> または <html> ルートから自動検出され、セレクターでどちらかのモードを強制することもできます。HTML モードではタグ名と属性名が小文字化されるので、XPath は小文字で書いてください。//DIV[@CLASS] ではなく //div[@class] です。

名前空間

名前空間を含む XML には、プレフィックスの登録が必要です:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <item>
    <content:encoded>...</content:encoded>
  </item>
</rss>

このテスターはドキュメント内の xmlns 宣言をスキャンしてすべてのプレフィックスを自動登録するため、//content:encoded はそのまま動きます。デフォルト名前空間(プレフィックスなしの xmlns="...")はドキュメント内にプレフィックスを持たないため、テスターはこれをプレフィックス d に割り当てます。デフォルト名前空間のフィードにある <item>//d:item で選択できます。登録済みのバインディングは結果の横に一覧表示されます。

このテスターが評価しないもの

ブラウザが評価するのは XPath 1.0 で、ほとんどのスクレイピングスタックが使うのと同じ方言です。matches(string, regex)tokenize(string, delimiter)for ... return 式、シーケンス演算子といった XPath 2.0 以降の機能は含まれません。これらは XSLT 2.0/3.0 のツールチェーンで利用できます。Web スクレイピングでは、XPath 1.0 が今も最もポータブルな選択肢です。

テストのコツ

  • 広く始めて絞り込む。 まず //div、次に //div[@class]、最後に具体的なクラス値を指定します。
  • 名前空間の宣言を確認する。 「XPath が何も返さないのはなぜ?」というバグの多くは名前空間が原因です。登録済みプレフィックスの一覧を確認してください。
  • 大文字と小文字に注意する。 XML は大文字と小文字を区別します。HTML モードでは名前が小文字化されます。
  • テキスト抽出では string() を試す。 //p/text()string(//p) は、入れ子のマークアップがあると結果が異なります。

よくある質問

いいえ、XPath のみです。ほとんどのブラウザは document.querySelectorAll(CSS)と document.evaluate(XPath)の両方をサポートしています。タスクにとって分かりやすい方を使ってください。

HTML の解析ではタグ名と属性名が小文字化されます。XPath が小文字になっているか確認してください。//DIV[@CLASS] ではなく //div[@class] です。モードも確認してください。崩れた HTML に XML モードを強制すると解析エラーで失敗しますが、HTML モードなら寛容に解析できます。

ドキュメントで宣言されたプレフィックスは、式で使えるように自動的に登録されます。デフォルト名前空間はプレフィックス d に割り当てられるため、デフォルト名前空間のドキュメントでは //d:item<item> 要素を選択できます。有効なバインディングは結果と併せて一覧表示されます。

いいえ。ドキュメントと式はブラウザ自身の XPath エンジンで評価され、当社のサーバーに送信されず、保存されず、ページのアドレスに追加されることもありません。複数ステップの画面で結果を表示するために、このブラウザのセッション内にだけ保持されます。

関連ツール