- 技術 💻
XMLファイルの開き方|中身の読み方・文字化けと開けない時の直し方
結論
XMLファイルはテキストなので、メモ帳・テキストエディット・ブラウザ・VS Codeで開けます。公文書のように見た目用の XSL とセットのものは、そろえた状態で表示します。
この記事でわかること
- 目的別・OS別の開き方の早見表と手順
- 開けない・白紙になるときのエラー原文12例
- 文字化け3パターンの原因と直し方の実物
XMLファイルは、データをタグで囲んで書いた文字のファイルです。何をしたいかで、開く道具が変わります。
flowchart TD
A[XMLファイル .xml] --> B{何をしたい?}
B -->|読む| C[メモ帳<br>VS Code]
B -->|木で見る| D[ブラウザ]
B -->|公文書| E[XSLと<br>そろえて<br>表示]
D -->|白紙・<br>赤い枠| F[文字コード<br>書き間違い<br>を直す]
急いでいる人向けに、よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| 何で開く? | メモ帳・テキストエディット・ブラウザ・VS Code | XMLファイルの開き方 |
| 公文書が白紙になる | XSL が読み込まれていない | 公文書のXMLが白紙になるとき |
| 赤い枠のエラーが出た | 書き間違い。行と列を見る | XMLが開けないとき |
| 文字化けする | 宣言の文字コードと保存の形式が違う | 文字化けの直し方 |
| 1行で読みにくい | 整形する(xmllint --format) | XMLを整形して読む |
| 値だけ取り出したい | XPath を使う | XPathで値を取り出す |
| XML とは | データをタグで書く決まった書き方 | XMLファイルとは |
| JSON との違い | XML はタグと属性、JSON は {} と [] | XMLとJSONの違い |
確認環境:Ubuntu 24.04.4 LTS。見本の XML ファイルを Chromium 141.0.7390.37(Playwright で操作)で開いて表示と開発者向けのコンソールの文言を確かめ、xmllint(libxml2 2.9.14)、Python 3.11.15 の xml.etree.ElementTree、lxml 6.1.3 で、書き間違い12例・文字化け・整形・XPath・XSL による変換を実行しました。Office 文書の中身は python-docx 1.2.0 で作った .docx を unzip で開いて確かめ、文字コードは file 5.45 と iconv(glibc 2.39)で調べました。XML の決まりは W3C の XML 1.0(第5版)、公文書の開き方は日本年金機構と e-Gov のご利用ガイド(2026年4月3日更新のページを含む)、ファイルを開くアプリの選び方は Apple と Microsoft のサポートページ、エディタの機能は VS Code の公式ドキュメント(2026年10月21日更新)と拡張機能のページ、RSS と sitemap は各仕様で確かめました(確認日 2026年10月23日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「XMLファイルの開き方|中身の読み方・文字化けと開けない時の直し方」
XMLファイルとは(拡張子・HTMLとの違い)
この節では、XML ファイルが何のファイルで、HTML とどこが違うのかが分かります。
XML(Extensible Markup Language)は、データを <name>佐藤 花子</name> のようにタグで囲んで書く決まった書き方で、XML ファイルはそれを保存した拡張子 .xml のテキストファイルです。 読み方は「エックスエムエル」です。規格は W3C(Web の標準を決める団体)の「XML 1.0(第5版)」で、2008年11月26日に勧告されました。
画像やアプリのような特別な形式ではなく、文字だけでできています。見本のファイルを file コマンドで調べると、テキストであることが分かります。
$ file order.xml
order.xml: XML 1.0 document, Unicode text, UTF-8 text
$ od -A d -t x1z -N 32 order.xml
0000000 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 ><?xml version="1<
0000016 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 >.0" encoding="UT<
先頭は <?xml という文字から始まる、ただの文字の並びです。 だから、文字を表示できるアプリなら何でも開けます。
よく比べられる HTML との違いです。
目的
XML だけでは見た目が決まらないので、ブラウザは木の形で表示する
タグの名前
<p>・<table> など、決められたものを使う<order>・<price> など、自分で決められるExtensible(拡張できる)の名前のとおり
書き間違い
「XML が開けない」の多くはこれ。後の節でエラー原文を確かめる
XMLの中身の読み方(宣言・タグ・属性・名前空間)
この節では、XML ファイルを開いたときに並んでいる記号が、それぞれ何を意味しているのかが分かります。
この記事では、次の order.xml(注文データの見本)を使います。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 注文データの見本 -->
<order id="A-1001" date="2026-10-23">
<customer>
<name>佐藤 花子</name>
<email>hanako@example.com</email>
</customer>
<items>
<item sku="P-01" qty="2">
<title>USBケーブル</title>
<price currency="JPY">980</price>
</item>
<item sku="P-02" qty="1">
<title>ノートPCスタンド</title>
<price currency="JPY">3480</price>
</item>
</items>
<note><![CDATA[「<」や「&」をそのまま書ける部分]]></note>
<memo>A & B < C</memo>
</order>
| 部品 | 見本の中の例 | 意味 |
|---|---|---|
| XML 宣言 | <?xml version="1.0" encoding="UTF-8"?> |
XML の版と文字コード。書くならファイルの先頭 |
| 要素(タグ) | <name>佐藤 花子</name> |
開始タグと終了タグで値を囲む |
| ルート要素 | <order>…</order> |
全体を包む1つだけの要素 |
| 属性 | id="A-1001" |
開始タグの中に書く補足の値 |
| 空要素 | <br/> のような形 |
中身の無い要素。/> で閉じる |
| コメント | <!-- 注文データの見本 --> |
メモ。データとしては読まれない |
| CDATA | <![CDATA[ … ]]> |
中の < や & を文字として扱う |
| 文字参照 | &・< |
& や < を書くための書き方 |
入れ子の形(木構造)が XML の基本です。 order の中に customer と items、items の中に item が2つ、という親子関係になっています。
XML 1.0 では、正しい形の XML(整形式)であるための決まりがあります。主なものは次のとおりです。
| 決まり | 正しい例 | 誤りの例 |
|---|---|---|
| ルート要素は1つ | <a><b/><c/></a> |
<a>1</a><b>2</b> |
| 開始タグと終了タグの名前が同じ(大文字・小文字も) | <name>…</name> |
<name>…</Name> |
| 入れ子を交差させない | <b><c>x</c></b> |
<b><c>x</b></c> |
属性の値は " か ' で囲む |
qty="2" |
qty=2 |
| 同じ属性を1つのタグに2回書かない | <a x="1"/> |
<a x="1" x="2"/> |
& と < は文字参照にする |
A & B |
A & B |
| XML 宣言はファイルの最初 | 1行目の1文字目から | 前に空行がある |
あらかじめ決まっている文字参照は5つです。
| 書きたい文字 | XML での書き方 |
|---|---|
& |
& |
< |
< |
> |
> |
' |
' |
" |
" |
名前空間(xmlns)とは
名前空間は、タグの名前がほかの XML と重ならないように付ける「名字」のようなものです。 xmlns="URI" や xmlns:w="URI" の形で書きます。URI は住所のような識別の文字列で、その URL にアクセスして何かを読み込むわけではありません。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.example.com/</loc></url>
</urlset>
Python で読み込むと、要素の名前は {名前空間}urlset という形になりました。この違いは、後の XPath の節で値を取り出すときに効いてきます。
{http://www.sitemaps.org/schemas/sitemap/0.9}urlset
XMLファイルの開き方(Windows・Mac・ブラウザ・VS Code)
この節では、目的と OS に合わせて、XML ファイルを開く道具と手順が分かります。
XML ファイルはテキストなので、ダブルクリックで開けなくても、右クリックから開くアプリを選べば中身が見られます。 ダブルクリックで開けないのは、拡張子 .xml に開くアプリが結び付いていないためです。
| 目的 | Windows | Mac |
|---|---|---|
| 中身をちょっと読む | メモ帳 | テキストエディット |
| 木の形で見る・折りたたむ | Edge・Chrome にドラッグ | Safari・Chrome にドラッグ |
| 編集する・誤りを見つける | VS Code(XML 拡張機能) | VS Code(XML 拡張機能) |
| 木の形で編集する | XML Notepad(Microsoft) | ― |
| 公文書(XML+XSL)を見る | e-Gov の公文書表示・Edge | e-Gov の公文書表示・Safari |
| 大きいファイル・まとめて処理 | xmllint・Python | xmllint・Python |
Windows(メモ帳・ブラウザ)で開く
ファイルを右クリックする
エクスプローラーで XML ファイルを右クリックし、「プログラムから開く」を選ぶ。
開くアプリを選ぶ
中身を読むならメモ帳、木の形で見るなら Microsoft Edge を選ぶ。一覧に無ければ「別のプログラムを選択」から探す。
いつも同じアプリで開くようにする
Microsoft のサポートでは、設定アプリの「アプリ」>「既定のアプリ」で「.xml」を検索し、開くアプリを選ぶ手順が案内されている。
Mac(テキストエディット・Safari)で開く
Control キーを押しながらクリックする
Finder で XML ファイルを Control キーを押しながらクリックし、「このアプリケーションで開く」を選ぶ。
開くアプリを選ぶ
中身を読むならテキストエディット、木の形で見るなら Safari を選ぶ。ファイルを Dock のアプリのアイコンへドラッグしても開ける。
いつも同じアプリで開くようにする
「ファイル」>「情報を見る」の「このアプリケーションで開く」でアプリを選び、「すべてを変更」をクリックする。
VS Code で開いて編集する
VS Code は XML を色分けして表示します。整形・誤りの表示・入力補完を使うには、Red Hat の拡張機能「XML」(ID は redhat.vscode-xml)を入れます。拡張機能のページでは、整形、DTD と XSD(XML の決まりを書いたファイル)による検証、XSL の対応、タグ名の自動の書きかえなどの機能が挙げられ、0.15.0 からは Java が無くても動くと説明されています。2026年10月23日時点の版は 0.29.2026101608 でした。
文字化けしたときは、VS Code の右下(ステータスバー)に表示されている文字コードをクリックすると、別の文字コードで開き直す・保存し直すことができると公式ドキュメントに書かれています。
XML Notepad(Windows)
XML Notepad は、Microsoft が GitHub で公開している Windows 用の XML ビューア・エディタで、ライセンスは MIT です。公式の README では、インストーラーのほか winget install XmlNotepad でも入れられ、winget の版は最新より遅れることがあると書かれています。
スマホで開く
iPhone・Android でも、テキストを表示できるアプリなら中身を読めます。ただし、XSL とセットで表として見せる公文書は、日本年金機構の案内ではパソコンの Microsoft Edge か Safari で開く手順になっています。
ブラウザでXMLを開いたときの表示
この節では、ブラウザに XML ファイルを読み込んだときに何が表示されるのか、その画面の意味が分かります。
order.xml を Chromium 141 にドラッグすると、1行目に次の英文が出て、その下に木の形で中身が表示されました。
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!-- 注文データの見本 -->
▼<order id="A-1001" date="2026-10-23">
▼<customer>
<name>佐藤 花子</name>
<email>hanako@example.com</email>
</customer>
▼<items>
▼<item sku="P-01" qty="2">
<title>USBケーブル</title>
<price currency="JPY">980</price>
</item>
…(以下略)
英文は「この XML には見た目の指定(スタイル)が無いので、文書の木を表示します」という意味で、エラーではありません。 XML はデータだけを持ち、見た目を持たないので、ブラウザは木の形で見せます。▼ をクリックするとその要素を折りたためます。ページの種類(document.contentType)は text/xml でした。
ブラウザで開いたときの表示には、次の違いがありました。
| 見え方 | 意味 | 次にすること |
|---|---|---|
| 英文+木の形 | 正しく読めた。見た目の指定が無い | そのまま読む |
| 赤い枠「This page contains the following errors」 | 書き間違いで読み込みが止まった | 枠の中の行と列を見る |
| 赤い枠「Encoding error」 | 文字コードが合っていない | 文字化けの節へ |
| 真っ白 | 見た目用の XSL が読み込めなかった | 次の節へ |
| 表や見出しが整って表示 | XSL が読み込めた | そのまま読む・印刷する |
SVG(拡張子 .svg)も中身は XML ですが、ブラウザは image/svg+xml という画像として扱い、木の形ではなく絵として表示しました。
公文書のXMLが白紙・文字だけになるとき(XSLとは)
この節では、e-Gov などから受け取った公文書の XML が白紙になる理由と、表示する方法が分かります。
公文書の XML は、データの XML と、見た目を決める XSL(スタイルシート)の2つがそろって初めて、表として表示されます。 XML の2行目あたりに、どの XSL を使うかが書かれています。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="notice.xsl"?>
<notice>
<title>資格取得確認通知書(見本)</title>
<office>株式会社サンプル</office>
<person><name>佐藤 花子</name><date>2026-10-01</date></person>
<person><name>鈴木 一郎</name><date>2026-10-15</date></person>
</notice>
flowchart TD
X[notice.xml<br>データ] -->|xml-stylesheet で指定| S[notice.xsl<br>見た目の設計図]
X --> B[ブラウザ]
S --> B
B -->|XSL を読めた| OK[表として表示]
B -->|XSL を読めない| NG[白紙]
この見本と、表を作る XSL(XSLT 1.0)を作り、Chromium 141 で3通りに開きました。
| 開き方 | 表示 | Chromium のコンソールの文言 |
|---|---|---|
| ファイルをダブルクリック相当(file://) | 白紙 | Unsafe attempt to load URL file:///…/notice.xsl … 'file:' URLs are treated as unique security origins. |
| XSL を置かずに XML だけ | 白紙 | Failed to load resource: … 404 |
| 手元の Web サーバー経由(http://127.0.0.1) | 表として表示 | (XSL の読み込みエラーなし) |
パソコンの中のファイルを直接開くと、Chromium は安全のため、XML から別のファイル(XSL)を読み込むことを止めました。 結果は白紙で、画面には何のエラーも出ません。同じ2つのファイルを Web サーバー経由で開くと、次のように表示されました。
資格取得確認通知書(見本)
事業所:株式会社サンプル
氏名 取得日
佐藤 花子 2026-10-01
鈴木 一郎 2026-10-15
白紙になる開き方
zip をダブルクリックして、中を「のぞいた」だけで開く
XML だけを別の場所にコピーして開く
Chrome・Edge でファイルを直接開く(file://)
表示できる開き方
zip を「すべて展開」し、XML と XSL を同じフォルダに置く
e-Gov の「公文書表示」に XML と XSL をそろえて渡す
日本年金機構の案内どおりに Edge か Safari の設定を変える
公式に案内されている表示の方法
日本年金機構のページ(2026年4月3日更新)では、XML 形式の通知書を開く手順を次のように案内しています。
zip を展開する
右クリックで「解凍」か「展開」を選ぶ。ダブルクリックで中を見るだけでは、展開されず閲覧できない。
すべてのファイルをそろえたまま開く
通知書の表示には対応する XSL が必要なので、一部のファイルだけを取り出さない。
「日本年金機構からのお知らせ」を開く
到達番号で始まる XML ファイル。ここから各通知書へのリンクをたどれる。
ブラウザでの表示方法は3つあります。
| 方法 | 手順の要点 | 出典 |
|---|---|---|
| e-Gov の「公文書表示」 | トップページかマイページから開き、XML と XSL をすべて選んで「公文書表示」。ポップアップブロックを解除しておく | e-Gov ご利用ガイド(2026年3月18日から) |
| Microsoft Edge | 設定の「既定のブラウザー」で「Internet Explorer モードでサイトの再読み込みを許可」をオンにして再起動し、公文書のアドレスを「Internet Explorer モード ページ」に追加して F5 | 日本年金機構の PDF |
| Safari(macOS) | 「開発」メニューを表示し、「ローカルファイルの制限を無効にする」を選ぶ | 日本年金機構の PDF |
e-Gov のご利用ガイドでは、e-Gov から取得した以外の文書でも、XML ファイルと XSL ファイルで構成されていれば「公文書の表示」で表示できると説明されています。
開発者・エンジニア向け:XSL で HTML に変換する
XSL は、XML を HTML などに変換するための決まり(XSLT)を書いたファイルです。Python の lxml で同じ変換をすると、ふつうの HTML ファイルができ、どのブラウザでもそのまま開けました。
from lxml import etree
doc = etree.parse("notice.xml")
transform = etree.XSLT(etree.parse("notice.xsl"))
html = transform(doc)
open("notice.html", "wb").write(bytes(html))
<html><body>
<h1>資格取得確認通知書(見本)</h1>
<p>事業所:株式会社サンプル</p>
<table border="1">
<tr>
<th>氏名</th>
<th>取得日</th>
</tr>
<tr>
<td>佐藤 花子</td>
<td>2026-10-01</td>
</tr>
手元の Web サーバーで試すときは、python3 -m http.server 8000 --bind 127.0.0.1 のように、自分のパソコンからだけつながる形で起動します。個人の情報が入った公文書は、内容を外部のサイトへアップロードする変換サービスには渡さないのが安全です。
PDF にしたいときは、表示できた画面をブラウザの印刷から PDF として保存します。 Chromium の印刷(PDF 出力)で、見本の通知書は A4 で1ページの PDF になりました。
XMLが開けない・エラーが出るとき(エラー原文と直し方)
この節では、XML が開けないときに出るエラーの原文と、その読み方・直し方が分かります。
XML は1か所でも書き間違いがあると、そこで読み込みを止めます。 W3C の XML 1.0 では、こうした誤りを「致命的なエラー」と呼び、見つけたら通常の処理を続けてはいけないと決めています。
Chromium 141 で閉じタグを忘れたファイルを開くと、赤い枠に次のように表示されました。
This page contains the following errors:
error on line 5 at column 9: Opening and ending tag mismatch: price line 4 and order
Below is a rendering of the page up to the first error.
「5行目の9列目で止まった。4行目の price と order のタグが合わない」という意味です。 枠の下には、止まった場所までの中身(この例では「佐藤 花子」)だけが表示されます。
書き間違いを12通り作り、xmllint と Python(ElementTree)で読み込んだ結果です。xmllint は xmllint --noout ファイル名 で、誤りがあれば場所を示して終了コード 1 になります。
$ xmllint --noout 01_unclosed.xml
01_unclosed.xml:5: parser error : Opening and ending tag mismatch: price line 4 and order
</order>
^
01_unclosed.xml:6: parser error : Premature end of data in tag order line 2
$ xmllint --noout 02_amp.xml
02_amp.xml:3: parser error : xmlParseEntityRef: no name
<memo>A & B</memo>
^
$ xmllint --noout order.xml && echo OK
OK
| 書き間違い | ファイルの中身 | xmllint のエラー | Python のエラー | 直し方 |
|---|---|---|---|---|
| 閉じタグ忘れ | <price>980 のまま |
Opening and ending tag mismatch | mismatched tag | </price> を足す |
& をそのまま |
A & B |
xmlParseEntityRef: no name | not well-formed (invalid token) | & にする |
| 大文字・小文字違い | <name>…</Name> |
Opening and ending tag mismatch | mismatched tag | 名前をそろえる |
| ルートが2つ | <a>1</a><b>2</b> |
Extra content at the end of the document | junk after document element | 全体を1つの要素で囲む |
| 宣言の前に空行 | 1行目が空 | XML declaration allowed only at the start of the document | XML or text declaration not at start of entity | 空行・空白を消す |
| 属性の囲み忘れ | qty=2 |
AttValue: " or ' expected | not well-formed (invalid token) | qty="2" |
| 入れ子の交差 | <b><c>x</b></c> |
Opening and ending tag mismatch | mismatched tag | 内側から閉じる |
| 宣言 UTF-8・中身 Shift_JIS | 日本語の名前 | Input is not proper UTF-8, indicate encoding ! | not well-formed (invalid token) | 次の節 |
| 空のファイル | 0バイト | Document is empty | no element found | 中身が届いているか確かめる |
残りの3例は、正しく読めたもの(宣言どおり Shift_JIS・先頭に BOM・ルートの後ろにコメント)です。xmllint の行と列は、止まった場所を ^ で指しています。原因はその場所か、その少し前にあります。
Python の標準ライブラリ(ElementTree)は、& の誤りも属性の囲み忘れも同じ「not well-formed (invalid token)」と表示しました。 原因が分かりにくいときは、xmllint に通すと、より具体的な文言が出ます。
XMLの文字化けの直し方(文字コード宣言・BOM)
この節では、XML の日本語が化ける・Encoding error になる原因と、直し方が分かります。
XML の文字化けは、ファイルの1行目に書いた文字コード(encoding="…")と、実際に保存した文字コードが違うときに起きます。 W3C の XML 1.0 では、宣言と違う文字コードで書かれていることは致命的なエラーとされています。宣言も BOM(ファイルの先頭の目印)も無いファイルは、UTF-8 として読まれます。
| パターン | 宣言 | 保存した文字コード | 結果 |
|---|---|---|---|
| A 正しい | UTF-8 | UTF-8 | 読める |
| B 正しい | Shift_JIS | Shift_JIS | 読める(Chromium・xmllint・lxml) |
| C 宣言が UTF-8・中身が Shift_JIS | UTF-8 | Shift_JIS | Encoding error |
| D 宣言が Shift_JIS・中身が UTF-8 | Shift_JIS | UTF-8 | Encoding error・化けた字 |
| E 宣言なし・中身が Shift_JIS | なし | Shift_JIS | Encoding error |
| F 先頭に BOM | UTF-8 | UTF-8(BOM 付き) | 読める |
C を Chromium 141 で開くと、赤い枠に error on line 2 at column 7: Encoding error と出て、名前は表示されませんでした。D を xmllint で読むと、化けた字が出て止まりました。
$ xmllint 13_utf8_declared_sjis.xml
encoding error : input conversion failed due to input error, bytes 0x90 0x3C 0x2F 0x6E
I/O error : encoder error
13_utf8_declared_sjis.xml:2: parser error : Premature end of data in tag name line 2
<name>菴占陸 闃ア蟄
直し方1:保存した文字コードを調べる
file コマンドで調べると、Shift_JIS のファイルと BOM 付きの UTF-8 は次のように表示されました。Windows のメモ帳や VS Code では、画面の下の端に今の文字コードが表示されます。
$ file 09_sjis_ok.xml sjis_to_utf8.xml 10_bom.xml
09_sjis_ok.xml: XML 1.0 document, Non-ISO extended-ASCII text
sjis_to_utf8.xml: XML 1.0 document, Unicode text, UTF-8 text
10_bom.xml: XML 1.0 document, Unicode text, UTF-8 (with BOM) text
直し方2:宣言と中身の両方を UTF-8 にそろえる
iconv で中身だけを UTF-8 に変えると、宣言が Shift_JIS のまま残り、かえって読めなくなりました(パターン D)。
$ iconv -f SHIFT_JIS -t UTF-8 09_sjis_ok.xml > iconv_out.xml
$ head -1 iconv_out.xml
<?xml version="1.0" encoding="Shift_JIS"?>
$ xmllint --noout iconv_out.xml
iconv_out.xml:2: parser error : Premature end of data in tag name line 2
xmllint の --encode を使うと、中身と宣言の両方を書きかえました。
$ xmllint --encode UTF-8 09_sjis_ok.xml > sjis_to_utf8.xml
$ cat sjis_to_utf8.xml
<?xml version="1.0" encoding="UTF-8"?>
<name>佐藤 花子</name>
エディタで直すときは、UTF-8 で保存し直してから、1行目の encoding="Shift_JIS" を encoding="UTF-8" に書きかえます。順番が逆でも、両方をそろえれば読めます。
Python で Shift_JIS の XML を読むとき
Python の標準ライブラリ(ElementTree)は、宣言どおりの Shift_JIS の XML(パターン B)でもエラーになりました。 lxml は同じファイルを読めました。
ElementTree : ValueError: multi-byte encodings are not supported
lxml 6.1.3 : 佐藤 花子
標準ライブラリで読むなら、先に UTF-8 に変換したファイルを使います。
XMLを整形して読む(xmllint --format・Python)
この節では、1行に詰まった XML を、字下げ付きの読みやすい形にする方法が分かります。
システムから出力された XML は、改行や空白を取って1行にしてあることが多く、そのままでは読めません。 整形しても中身の意味は変わりません。
$ head -c 120 order.min.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 注文データの見本 --><order id="A-1001" date="2026-10-23"><customer><n
$ xmllint --format order.min.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 注文データの見本 -->
<order id="A-1001" date="2026-10-23">
<customer>
<name>佐藤 花子</name>
<email>hanako@example.com</email>
</customer>
<items>
<item sku="P-01" qty="2">
字下げの幅は、環境変数 XMLLINT_INDENT で変えられました(XMLLINT_INDENT=' ' で4つ)。xmllint --format は、整形と同時に書き間違いも調べます。
Python では、標準ライブラリの ET.indent(Python 3.9 から)か minidom で整形できます。
import xml.etree.ElementTree as ET
root = ET.fromstring(open("order.min.xml", encoding="utf-8").read())
ET.indent(root, space=" ")
print(ET.tostring(root, encoding="unicode"))
<order id="A-1001" date="2026-10-23">
<customer>
<name>佐藤 花子</name>
<email>hanako@example.com</email>
</customer>
| 道具 | コマンド・操作 | XML 宣言・コメント |
|---|---|---|
| xmllint | xmllint --format 入力 > 出力 |
残る |
| Python ElementTree | ET.indent(root) |
宣言とコメントは出力されない |
| Python minidom | parseString(s).toprettyxml() |
宣言は <?xml version="1.0" ?> に変わる |
| VS Code | XML 拡張機能を入れて「ドキュメントのフォーマット」 | 残る |
| ブラウザ | ドラッグして開く(表示だけ) | 宣言は表示されない |
よく出会うXMLファイル(設定ファイル・Office文書・RSS・sitemap.xml・SVG)
この節では、手元にある「.xml」や XML でできたファイルが、何のファイルなのかを見分けられます。
1設定ファイル
Java の pom.xml(Maven)、logback.xml(ログの設定)、Android の AndroidManifest.xml など。アプリの動きを決める。
2Office 文書の中身
.docx などは、中身が XML ファイルの集まりを zip にまとめたもの。
3RSS フィード
ブログやニュースの新着を配る形式。feed.xml・rss.xml などの名前が多い。
4sitemap.xml
サイトのページの一覧を検索エンジンに伝えるファイル。
5SVG 画像
拡張子は .svg だが、中身は XML のテキスト。ブラウザでは絵として表示される。
6公文書・業務データ
電子申請の通知書や、システム間でやり取りするデータ。XSL とセットのことがある。
設定ファイル(pom.xml など)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
</project>
設定ファイルは、書きかえるとアプリの動きが変わります。編集する前にコピーを取り、保存したら xmllint --noout で書き間違いが無いかを確かめます。
Office 文書(.docx)の中身は XML
Word の .docx は、XML ファイルなどを zip でまとめたものです。 python-docx 1.2.0 で見出しと太字の入った .docx を作り、unzip で中を見ました(抜粋)。
$ file memo.docx
memo.docx: Microsoft Word 2007+
$ unzip -l memo.docx
Length Date Time Name
--------- ---------- ----- ----
1738 2026-10-23 20:33 [Content_Types].xml
734 2026-10-23 20:33 _rels/.rels
721 2026-10-23 20:33 docProps/core.xml
1750 2026-10-23 20:33 word/document.xml
349458 2026-10-23 20:33 word/styles.xml
2811 2026-10-23 20:33 word/fontTable.xml
(ほか11ファイル。合計17ファイル)
本文は word/document.xml に入っていました。整形して見ると、段落が w:p、文字のまとまりが w:r、文字が w:t、太字が w:b でした。
$ unzip -o -q memo.docx -d memo && xmllint --format memo/word/document.xml
<w:p>
<w:pPr>
<w:pStyle w:val="Heading1"/>
</w:pPr>
<w:r>
<w:t>議事録</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t xml:space="preserve">次回は </w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t>10月30日</w:t>
</w:r>
</w:p>
この形式は Office Open XML と呼ばれ、Ecma International の ECMA-376 で決められています。反対に、.docx の拡張子を .xml に変えて xmllint に渡すと、Start tag expected, '<' not found で止まりました。先頭が zip の目印(PK)だからです。zip の扱い方は、関連記事「zip・unzipコマンドの使い方|圧縮・解凍・パスワード・文字化け」で扱っています。
RSS フィード
RSS 2.0 の仕様(2009年3月30日の 2.0.11)では、channel に title・link・description が必須で、記事ごとの item には title か description の少なくとも一方が要ります。日付(pubDate)は RFC 822 の形式です。
<rss version="2.0">
<channel>
<title>サンプル技術ブログ</title>
<link>https://www.example.com/</link>
<description>新着記事のお知らせ</description>
<item>
<title>XMLファイルの開き方</title>
<link>https://www.example.com/blog/xml/</link>
<pubDate>Fri, 23 Oct 2026 09:00:00 +0900</pubDate>
</item>
</channel>
</rss>
Chromium 141 で開くと、ほかの XML と同じく木の形で表示されました。Python で記事の一覧を取り出した結果です。
import xml.etree.ElementTree as ET
rss = ET.parse("feed.xml").getroot()
for it in rss.iterfind("channel/item"):
print(it.findtext("pubDate")[:16], it.findtext("title"))
Fri, 23 Oct 2026 XMLファイルの開き方
Thu, 22 Oct 2026 JSONとは
sitemap.xml
sitemaps.org の仕様では、ルートは urlset、ページごとに url と loc が必須で、文字コードは UTF-8、1ファイルに 50,000 URL・圧縮前 50MB までと決められています。名前空間は http://www.sitemaps.org/schemas/sitemap/0.9 です。書き方と確かめ方は、関連記事「robots.txt・sitemap.xmlの書き方|テンプレートと検証手順」で扱っています。
SVG
SVG はベクター形式の画像ですが、中身は XML のテキストです。file コマンドは SVG Scalable Vector Graphics image と表示し、Chromium はページの種類を image/svg+xml として絵を表示しました。くわしくは、関連記事「SVGファイルとは|PNGとの違い・開き方・作り方を実測で解説」で扱っています。
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="120" viewBox="0 0 120 120">
<circle cx="60" cy="60" r="50" fill="#2b6cb0"/>
<text x="60" y="70" font-size="28" text-anchor="middle" fill="#fff">XML</text>
</svg>
XPathでXMLから値を取り出す
この節では、大きな XML から必要な値だけを取り出す XPath の書き方を、実行結果つきで確かめられます。
XPath は、XML の中の場所を /order/customer/name のような「道筋」で指す書き方です。 W3C の XPath 1.0 で決められていて、xmllint・Python の lxml・ブラウザなど多くの道具で使えます。
$ xmllint --xpath '/order/customer/name/text()' order.xml
佐藤 花子
$ xmllint --xpath '//item/@sku' order.xml
sku="P-01"
sku="P-02"
$ xmllint --xpath '//item[@qty>1]/title/text()' order.xml
USBケーブル
$ xmllint --xpath 'count(//item)' order.xml
2
$ xmllint --xpath 'sum(//price)' order.xml
4460
$ xmllint --xpath 'string(/order/@date)' order.xml
2026-10-23
| 書き方 | 意味 | 見本での結果 |
|---|---|---|
/order/customer/name |
ルートからたどる | 佐藤 花子 |
//item |
どの深さでも item を探す | item 2つ |
@sku |
属性 | P-01・P-02 |
text() |
要素の中の文字 | 980 など |
[@qty>1] |
条件で絞る | qty が 2 の item |
count()・sum() |
数える・合計する | 2・4460 |
名前空間のある XML でつまずく
sitemap.xml のように xmlns がある XML では、//loc と書いても何も見つかりませんでした。
$ xmllint --xpath '//loc/text()' sitemap.xml
XPath set is empty
$ xmllint --xpath '//*[local-name()="loc"]/text()' sitemap.xml
https://www.example.com/
https://www.example.com/blog/xml/
$ xmllint --xpath '//w:t' memo/word/document.xml
XPath error : Undefined namespace prefix
XPath evaluation failure
要素の名前に名前空間が付いているためです。local-name() で名前空間を外した名前を比べるか、プログラムで名前空間に短い名前(接頭辞)を割り当てます。
from lxml import etree
t = etree.parse("order.xml")
print(t.xpath("//item[price > 1000]/title/text()"))
for it in t.xpath("//item"):
print(it.get("sku"), it.findtext("title"), int(it.get("qty")) * int(it.findtext("price")))
s = etree.parse("sitemap.xml")
ns = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}
print(s.xpath("//sm:loc/text()", namespaces=ns))
['ノートPCスタンド']
P-01 USBケーブル 1960
P-02 ノートPCスタンド 3480
['https://www.example.com/', 'https://www.example.com/blog/xml/']
Python の標準ライブラリ(ElementTree)は XPath の一部だけに対応しています。findall('.//item[@qty="2"]') は動きましたが、findall("//item") は SyntaxError: cannot use absolute path on element になりました。先頭に . を付けて書きます。
XMLとJSONの違い
この節では、よく比べられる JSON と XML の違いを、同じデータで確かめられます。
どちらも入れ子のデータを文字で表せます。XML はタグと属性で書き、JSON は {} と [] で書きます。 見本の注文データ(メモ・コメントを除く)を、どちらも空白と改行を取って保存すると、XML は 339 バイト、JSON は 305 バイトでした。
| 項目 | XML | JSON |
|---|---|---|
| 書き方 | <name>花子</name> |
{"name": "花子"} |
| 属性 | 書ける(qty="2") |
無い(キーで表す) |
| 値の型 | すべて文字(型はスキーマで決める) | 文字列・数値・真偽値・null など |
| コメント | <!-- --> で書ける |
書けない |
| 見た目の指定 | XSL で HTML に変換できる | 仕組みとしては無い |
| 中身の検証 | DTD・XML Schema(XSD) | JSON Schema |
| よく使う場面 | 公文書・Office 文書・RSS・設定ファイル | Web API・設定ファイル |
同じデータを5つの形式で書いて比べた結果と選び方は、関連記事「CSV・JSON・XML・YAML・TOMLの違いと使い分け|同じデータで比較」で扱っています。JSON の書き方とエラーの例は、関連記事「JSONとは|JSONファイルの書き方・開き方とエラー例を実物で解説」で扱っています。
XMLを編集・保存するときの注意
この節では、XML を手で直して保存するときに、読めなくしないための確かめ方が分かります。
- 1編集する前にコピーを取った設定ファイルや公文書は元に戻せるようにする
- 2開始タグと終了タグの名前が同じ大文字・小文字も含めてそろえる
- 3& と < を文字参照にしたURL の中の & も & にする
- 41行目の encoding と保存の形式が同じ迷ったら両方を UTF-8 にする
- 5XML 宣言の前に空行・空白が無いコピー&貼り付けで入りやすい
- 6保存したら読み込めるか確かめたxmllint --noout かブラウザで開いて赤い枠が出ない
外から受け取った XML をプログラムで読み込むときは、使っている XML ライブラリの注意書きを確かめます。 Python のドキュメントでは、信頼できない XML を解析するときの注意として「XML security」の節があり、Expat(Python が使う XML の読み込みの部品)が 2.7.2 より前の版だと、大量のメモリを使わせる XML への対策が足りない場合があるので pyexpat.EXPAT_VERSION で版を確かめるよう書かれています。手元の Python 3.11.15 では expat_2.6.1 でした。
文字コードの仕組み(UTF-8 と Unicode の関係)は、関連記事「UnicodeとUTF-8の違いとは?UTF-16・サロゲートペアまで実行結果で理解」で扱っています。
よくある質問
Q. XMLファイルは何で開けばいいですか? A. 中身を読むだけなら Windows はメモ帳、Mac はテキストエディット、木の形で見るならブラウザにドラッグします。編集するなら、XML 拡張機能を入れた VS Code が便利です。
Q. XMLファイルをダブルクリックしても開けません。 A. 拡張子 .xml に開くアプリが結び付いていないためです。Windows は右クリックの「プログラムから開く」、Mac は Control キーを押しながらクリックして「このアプリケーションで開く」からアプリを選びます。
Q. 公文書の XML を開くと白紙になります。 A. 見た目を決める XSL ファイルが読み込めていないためです。zip をすべて展開して XML と XSL を同じフォルダに置き、e-Gov の「公文書表示」で両方を選ぶか、日本年金機構の案内どおり Edge か Safari の設定を変えて開きます。
Q. Edge や Chrome で XML が表示されないのはなぜですか? A. パソコンの中のファイル(file://)を直接開くと、ブラウザが XML から別のファイル(XSL)を読み込むことを止めるためです。Chromium 141 では白紙になり、コンソールに「'file:' URLs are treated as unique security origins.」と出ました。
Q. 「This XML file does not appear to have any style information」と出ます。エラーですか? A. エラーではありません。見た目の指定が無い XML なので、文書の木を表示しますという意味です。その下に中身が表示されます。
Q. XML が文字化けします。
A. 1行目の encoding="…" と、実際に保存した文字コードが違うときに起きます。xmllint の --encode UTF-8 か、エディタで UTF-8 で保存し直して宣言も UTF-8 にそろえます。
Q. XML を見やすく整形するには?
A. xmllint --format ファイル名 か、Python の ET.indent、VS Code の XML 拡張機能の整形を使います。ブラウザで開くだけでも、字下げした木の形で読めます。
Q. XML を PDF にするには? A. ブラウザで表示できた画面を、印刷から PDF として保存します。公文書は XSL で表として表示できた状態で印刷します。
Q. XML とは簡単に言うと何ですか?
A. データを <name>佐藤 花子</name> のようにタグで囲んで書く、決まった書き方です。タグの名前を自分で決められ、プログラムどうしでデータを受け渡すのに使われます。
Q. XML と HTML の違いは? A. HTML は Web ページを表示するための決まったタグを使い、XML はデータを表すタグを自分で決めます。XML は1か所でも書き間違いがあると読み込みを止めます。
Q. スマホで XML を開けますか? A. テキストを表示できるアプリなら中身を読めます。XSL とセットの公文書は、日本年金機構の案内ではパソコンの Edge か Safari で開く手順になっています。
Q. XSL とは何ですか?
A. XML を HTML などに変換して見やすくするための決まり(XSLT)を書いたファイルです。XML の <?xml-stylesheet … href="…xsl"?> で指定されます。
まとめ
- XML ファイルは、データをタグで囲んで書いた拡張子 .xml のテキスト。メモ帳・テキストエディット・ブラウザ・VS Code で開ける。
- 中身は XML 宣言・要素・属性・コメント・CDATA・文字参照でできた木構造。
xmlnsの名前空間は名前の重なりを防ぐためのもの。 - ブラウザの「This XML file does not appear to have any style information…」はエラーではなく、木の形で表示しているだけ。
- 公文書が白紙になるのは XSL が読み込めないため。Chromium は file:// で開くと XSL の読み込みを止めた。zip をすべて展開し、e-Gov の公文書表示か、案内どおりの Edge・Safari の設定で開く。
- 開けないときは、エラーの行と列を見る。閉じタグ忘れ・
&のそのまま書き・ルートが2つなど9例のエラー原文と直し方を表にした。 - 文字化けは宣言と保存の文字コードの違い。iconv で中身だけ変えると宣言が残って読めなくなる。
xmllint --encode UTF-8なら両方そろう。 - 1行の XML は
xmllint --formatで整形し、必要な値は XPath で取り出す。名前空間のある XML はlocal-name()か接頭辞の割り当てが要る。
参考・出典
確認日はいずれも 2026年10月23日です。
- W3C「Extensible Markup Language (XML) 1.0 (Fifth Edition)」:https://www.w3.org/TR/xml/
- W3C「XML Path Language (XPath) Version 1.0」:https://www.w3.org/TR/xpath-10/
- 日本年金機構「電子申請およびオンライン事業所年金情報サービスにおけるXML形式の通知書等の閲覧方法」:https://www.nenkin.go.jp/denshibenri/denshishinsei/koubunsho-open.html
- 日本年金機構「XMLファイル形式の公文書を開く方法」(PDF):https://www.nenkin.go.jp/denshibenri/denshishinsei/koubunsho-open.files/xml-open.pdf
- 日本年金機構「機構から送付されるXML形式の通知書の開き方」:https://www.nenkin.go.jp/section/faq/denshi/e-gov/koubunsho_hirakikata.html
- e-Gov 電子申請「公文書表示」ご利用ガイド:https://shinsei.e-gov.go.jp/contents/help/guide/official-doc-view
- Apple「Macでファイルを開くアプリを選択する」:https://support.apple.com/ja-jp/guide/mac-help/mh35597/mac
- Microsoft サポート「Windows で既定のアプリを変更する」:https://support.microsoft.com/ja-jp/windows/windows-%E3%81%A7%E6%97%A2%E5%AE%9A%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B-e5d82cad-17d1-c53b-3505-f10a32e1894d
- Visual Studio Code「Basic editing」:https://code.visualstudio.com/docs/editing/codebasics
- Visual Studio Marketplace「XML(Red Hat)」:https://marketplace.visualstudio.com/items?itemName=redhat.vscode-xml
- GitHub「microsoft/XmlNotepad」:https://github.com/microsoft/XmlNotepad
- Python ドキュメント「XML Processing Modules」:https://docs.python.org/3/library/xml.html
- RSS Advisory Board「RSS 2.0 Specification」:https://www.rssboard.org/rss-specification
- sitemaps.org「Sitemaps XML format」:https://www.sitemaps.org/protocol.html
- Ecma International「ECMA-376 Office Open XML file formats」:https://ecma-international.org/publications-and-standards/standards/ecma-376/
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「XMLファイルの開き方|中身の読み方・文字化けと開けない時の直し方」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。