XMLツール

XPathテスター一致しない理由を文書で確かめる

ボタンまたはCtrl/Cmd+Enterで評価します。入力、対応表、表示方法を変えたら再実行してください。

XPathテスター

XML入力

結果

XMLと式はこのブラウザーで処理し、文書をサーバーへ送信しません。

ASCII接頭辞を使います。例:{"b":"urn:books"}。原文と同じ接頭辞でなくても構いません。

XPath 1.0。Ctrl/Cmd+Enterで手動実行します。JSONのスカラー値は文字列にしてNaNとInfinityを保持します。

結果が古くなりました。書き出すには再評価してください。

XPathテスターは、サンプルで動いた式が実際のXMLで一致しなくなったときに役立ちます。既定の名前空間、属性条件、子孫の位置を分けて調べると原因を絞れます。

XML名前空間を含むXPath式を原文のまま評価します。XPathでノードを取得した結果と文字列値を比較でき、整形で空白が消えた文書を誤って検証することもありません。

XPathテスターで確認できること

選択した枝を追う

XPathテスターでは同じ二つのtitle要素を、ノード断片、テキスト値、絶対パスで比較できます。表示方法を変更しても入力文書は書き換えません。

XMLツリーの二つのタイトル分岐を選び、二つの結果として抽出する図。

接頭辞ではなくURIで結び付ける

bをurn:booksに割り当てれば、原文が別の接頭辞を使っていても//b:bookで選べます。ローカル名が同じでも、異なる名前空間の要素は別物です。

異なる名前空間の同名ノードから、対応する一組だけを選ぶ図。

結果が変わる三つのポイント

01

既定の名前空間に別名を付ける

xmlns="urn:books"がある文書には{"b":"urn:books"}を設定し、//b:bookを使います。//bookは名前空間のない要素だけを選びます。

02

テキスト表示とtext()を区別する

テキスト表示は選択した要素の子孫も含めた文字列値です。//title/text()は直接のテキストノードを選ぶため、混在内容では結果が異なります。

03

再評価してから保存する

XML、式、対応表、表示方法を変えると書き出しを無効化します。再評価の成功後に保存してください。表示は50件ずつ増え、コピーと保存には成功結果の全件が入ります。

選択・抽出・位置の確認

四種類の結果

ノード集合のほか、string(//title)、count(//book)、boolean(//missing)も評価できます。JSONには型を記録し、値は文字列として保存するため、NaNやInfinityがnullに変わりません。

属性と条件式

//book[@id="b1"]で要素を絞り、//@idで属性を取得し、//book[price>15]/titleで数値条件を試せます。一致が0件でも正常終了し、valuesは空配列になります。

再確認できる位置パス

同名の兄弟には位置番号を付けます。名前空間付き要素ではlocal-name()とnamespace-uri()を使うため、接頭辞の対応表に依存しません。文書構造を変えると位置も変わる場合があります。

対応範囲と制限

XPath 1.0に限定
XPathテスターはブラウザーの実エンジンを使用します。XPath 2.0/3.1、matches()、ends-with()、変数、XQueryは対象外です。namespace::軸はブラウザー間で同じ結果を保証しません。
修復しないXML解析
整形式のXML 1.0だけを受け付け、DTDと外部実体を拒否します。符号化宣言はUTF-8のみ対応します。HTMLのタグ補完や、テキスト結果を変える空白除去は行いません。 XPathのテキストモデルに合わせ、隣接するテキストとCDATAを結合します。ノードの出力ではCDATA記号がエスケープされたテキストに変わることがありますが、文字内容は保持します。
名前空間は明示的に指定
JSONのキーはASCIIの接頭辞、値は空でないURIです。空の接頭辞とxmlnsは使えず、xmlは標準URI専用です。原文の接頭辞が非ASCIIでも、同じURIにASCIIの別名を割り当てて検索できます。
同期処理の容量制限
入力100,000文字、属性やテキストを含む2,000ノード、深さ100、式2,000文字、一致1,000件、出力2,000,000文字までです。超過時は全体をエラーにします。同期APIに強制タイムアウトはなく、複雑な式ではタブが一時停止する場合があります。
入力と復元の範囲
貼り付け入力のみで、URL読み込み、ファイルアップロード、共有保存、スキーマ検証はありません。クリアとサンプルはプレビュー後に適用し、一度の元に戻す操作で入力、設定、結果をまとめて復元できます。

XPathテスターのよくある質問

どのXPathエンジンを使っていますか?

ブラウザー標準のXPath 1.0エンジンです。XPath 2.0以降のmatches()などは使えません。高いバージョンの式が失敗しても、XMLの誤りとは限りません。

文字列・数値・真偽値も確認できますか?

はい。string(//title)、count(//book)、boolean(//book)を試せます。型と文字列値をJSONに記録し、false、空文字列、NaNも正常な結果として扱います。

属性の値で要素を選ぶにはどうしますか?

//book[@id="b1"]は属性で要素を絞ります。//book/@idは属性値を取り出します。属性名は大文字小文字を区別し、無接頭辞の属性は既定の名前空間を継承しません。

/と//はどう違いますか?

/は直接の次のステップ、//はその場所から子孫を検索します。/library/bookはルートからたどり、//bookは文書内の深い位置にも一致します。

名前空間付きの文書で一致しないのはなぜですか?

XMLの既定の名前空間は無接頭辞要素に適用されますが、XPath 1.0の無接頭辞名には適用されません。URIに別名を割り当て、式でその別名を使ってください。

予期しない結果が出ましたか?

次の式を確かめる

XPathテスターで成功した式を、名前空間の対応表とXMLサンプルとともに記録すると、後で結果の違いを再現して調べやすくなります。