結論

XMLファイルはテキストなので、メモ帳・テキストエディット・ブラウザ・VS Codeで開けます。公文書のように見た目用の XSL とセットのものは、そろえた状態で表示します。

この記事でわかること

  • 目的別・OS別の開き方の早見表と手順
  • 開けない・白紙になるときのエラー原文12例
  • 文字化け3パターンの原因と直し方の実物

2026年10月23日更新|Chromium 141・xmllint・Python 3.11で実行確認

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 との違いです。

目的

HTMLWeb ページの見た目と構造を、ブラウザに表示するため
↔
XMLデータの中身と構造を、プログラムどうしで受け渡すため

XML だけでは見た目が決まらないので、ブラウザは木の形で表示する

タグの名前

HTML<p>・<table> など、決められたものを使う
↔
XML<order>・<price> など、自分で決められる

Extensible(拡張できる)の名前のとおり

書き間違い

HTML閉じタグを忘れても、ブラウザがなんとか表示する
↔
XML1か所でも誤りがあると、そこで読み込みを止める

「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 &amp; B &lt; C</memo>
</order>
部品 見本の中の例 意味
XML 宣言 <?xml version="1.0" encoding="UTF-8"?> XML の版と文字コード。書くならファイルの先頭
要素(タグ) <name>佐藤 花子</name> 開始タグと終了タグで値を囲む
ルート要素 <order>…</order> 全体を包む1つだけの要素
属性 id="A-1001" 開始タグの中に書く補足の値
空要素 <br/> のような形 中身の無い要素。/> で閉じる
コメント <!-- 注文データの見本 --> メモ。データとしては読まれない
CDATA <![CDATA[ … ]]> 中の < や & を文字として扱う
文字参照 &amp;・&lt; & や < を書くための書き方

入れ子の形(木構造)が 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 &amp; B A & B
XML 宣言はファイルの最初 1行目の1文字目から 前に空行がある

あらかじめ決まっている文字参照は5つです。

書きたい文字 XML での書き方
& &amp;
< &lt;
> &gt;
' &apos;
" &quot;

名前空間(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(メモ帳・ブラウザ)で開く

1

ファイルを右クリックする

エクスプローラーで XML ファイルを右クリックし、「プログラムから開く」を選ぶ。

右クリック

2

開くアプリを選ぶ

中身を読むならメモ帳、木の形で見るなら Microsoft Edge を選ぶ。一覧に無ければ「別のプログラムを選択」から探す。

選ぶ

3

いつも同じアプリで開くようにする

Microsoft のサポートでは、設定アプリの「アプリ」>「既定のアプリ」で「.xml」を検索し、開くアプリを選ぶ手順が案内されている。

既定

Mac(テキストエディット・Safari)で開く

1

Control キーを押しながらクリックする

Finder で XML ファイルを Control キーを押しながらクリックし、「このアプリケーションで開く」を選ぶ。

Control

2

開くアプリを選ぶ

中身を読むならテキストエディット、木の形で見るなら Safari を選ぶ。ファイルを Dock のアプリのアイコンへドラッグしても開ける。

選ぶ

3

いつも同じアプリで開くようにする

「ファイル」>「情報を見る」の「このアプリケーションで開く」でアプリを選び、「すべてを変更」をクリックする。

既定

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 形式の通知書を開く手順を次のように案内しています。

1

zip を展開する

右クリックで「解凍」か「展開」を選ぶ。ダブルクリックで中を見るだけでは、展開されず閲覧できない。

展開

2

すべてのファイルをそろえたまま開く

通知書の表示には対応する XSL が必要なので、一部のファイルだけを取り出さない。

XSL

3

「日本年金機構からのお知らせ」を開く

到達番号で始まる 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) &amp; にする
大文字・小文字違い <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 に通すと、より具体的な文言が出ます。

12例試した書き方書き間違い9・正しく読めるもの3
9例xmllint が止めた数すべて終了コード 1
1か所Chromium が示した誤りの数最初の誤りで止まり、そこまでを表示

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 の中の & も &amp; にする
  • 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期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?