XML解析

XMLの構文を検証し、読みやすく整形するツール。XPathで必要な要素だけを取り出せるため、RSSフィード、SOAPレスポンス、Androidやsitemapの設定ファイルの確認に使える。

読み込み中…

使い方

  1. 解析したいXMLを入力する。
  2. 構文エラーがある場合はエラーメッセージと該当行・列を確認する。
  3. 整形結果のインデントを選び、コピーまたは保存する。
  4. XPathを入力し、該当する要素・属性・テキストを確認する。

こんな用途に

  • RSSフィード、SOAPレスポンス、sitemap.xmlの構文を確認したいとき。
  • 1行に詰まったXMLを読みやすく整形したいとき。
  • 大きなXMLから特定の要素や属性の値だけを取り出したいとき。

仕組み

  • ブラウザ標準のDOMParserでXMLを解析し、parsererror要素からエラー位置を取得。
  • 解析結果のDOMを再帰的にたどり、指定したインデントで出力。空白のみのテキストは除去。
  • XPathはブラウザ標準のdocument.evaluateで評価。

確認ポイント

  • XMLは大文字小文字を区別し、すべての要素を閉じる必要がある。HTMLの<br>はXMLでは<br/>と書く。
  • 本文に「&」「<」を書く場合は&amp;・&lt;にエスケープするか、CDATAセクションで囲む。
  • XPathの//titleは全階層のtitle要素、@idは属性、text()はテキストを表す。

手元でやるには

XMLを検証して整形

必要環境: xmllint(macOS標準搭載、Linuxはlibxml2-utils)
xmllint --format input.xml

XPathで抽出

必要環境: xmllint
xmllint --xpath '//book/title/text()' input.xml

よくある質問

整形すると空白が変わる?

空白のみのテキストを除去し、テキストの前後の空白を削る。<p>a <b>b</b></p>のようにテキストと要素が混在する文書では、単語間の空白が変わる場合がある。

名前空間付きのXMLをXPathで検索するには?

ルート要素で宣言された接頭辞(soap:Bodyなど)はそのまま使える。接頭辞のないデフォルト名前空間の要素は *[local-name()='item'] のように指定する。

関連ツール