分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
ここで XML を INI に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。
一度に100ファイルまで。フォーマットが混ざっていても構いません。
順番に変換し、まとめてZIPでダウンロードします。
XML から INI
.NET の App.config を置き換える小さなツールや、INI しか読めない古いインストーラー、20年前から変わっていない機器の設定パーサー。こうした読み込み先に値を渡すために、XML の階層構造をフラットなキーと値の並びに変換する必要が出てくる場面があります。
このページは XML のツリー構造を、セクションとドット区切りのキーに変換します。翻訳ではなく抽出だと考えてください。
この変換は、各値までの経路をドット区切りのパスとして組み立て、それを最初のドットで1回だけ区切ります。区切りより前がセクション名、後ろがキーになります。XML の文書はルート要素を1つしか持たないため、そのパスの最初の部分はファイル内のすべての値で同じになり、結果として1つのセクションの下に長いキーの一覧が並びます。
YAML や JSON からの同じ変換では、トップレベルのキーの数だけセクションができるのとは対照的です。論理的なまとまりごとにセクションを分けたい場合は、ルート直下の子要素ごとに個別に変換するほうが確実です。
典型的な .NET の構造——configuration というルートの下に appSettings があり、その中に key と value という属性を持つ add 要素がいくつも並ぶ形——を変換すると、configuration という1つのセクションの中に、appSettings.add.0.@key が Timeout、appSettings.add.0.@value が 30 という形のキーが並びます。
正確ではありますが、読みやすくはありません。本当に欲しかった情報「Timeout は 30」は、同じ番号でつながった2行に分かれてしまいます。スクリプトに渡すだけなら、この2行を読んで Timeout=30 と書き直すほうが、この形のまま読み込ませるより早いことがよくあります。
すべての属性は @ を先頭に付けたキーの一部になります。id という属性を持つ要素なら、@id で終わるキーになります。属性とテキストの両方を持つ要素では、テキストの部分は #text という名前のセグメントに入ります。属性がすでに要素自体のキーを使っているためです。
どちらの記号も INI の標準的な慣習ではなく、INI を読むソフトが特別扱いすることもありません。プログラムに渡す前に、まず取り除くことを検討してください。INI 側にはもう壊れる構造がないので、キー名のリネームは安全に行えます。
同じタグを持つ兄弟要素が2つ以上あると、add.0、add.1 のように、文書に現れた順に番号が振られます。順序は保たれるので、ルールの一覧や検索パスのような用途では重要な性質です。
一方で、その要素が1つしかない場合には番号が付きません。パーサーには、その要素が繰り返しうるものかどうかを知る手段がないためです。つまり、設定が1件のときと2件のときとでキー名が変わってしまいます。番号付きのキーを前提にしたスクリプトは、設定が1件しかない日に何も見つけられません。
バージョンと文字コードの宣言で始まる文書は、?xml という名前のセクションを作ります。ルート要素の名前空間の宣言があれば、@xmlns のようなキーとして本来のセクションに紛れ込みます。どちらも設定の内容ではなく、XML そのものについての情報です。
この2つは削除してください。放置しても INI としては違反にはなりませんが、次にこのファイルを見る人や、場合によってはパーサーを混乱させます。文字コードの値も、そのまま信用しないほうがよいでしょう。1.0のような値は数値として解釈され、1として出力されるため、元の宣言と一致しなくなっていることがあります。
ライセンス文やスクリプト、整形された説明文のように、1つの要素の中に複数行のテキストが入っていることがあります。現在の書き出し処理では、こうした値を引用符で囲み、改行はバックスラッシュとnで表現するため、要素は1つの項目のまま壊れずに戻ってきます。
それでも、こうした複数行のテキストを含む要素がどこにあるかは把握しておく価値があります。読み込み先のプログラムがバックスラッシュをそのまま文字として読んでしまう場合があるためです。それが重要な場面では、テキストを別ファイルに分け、INI にはそのパスだけを持たせるほうが安全です。
セミコロンやスラッシュ、空白、内部に含まれる等号は、そのまま値として残ります。INI パーサーは最初の等号だけで区切るため、Server=db;Database=xのような接続文字列も1つの値として正しく戻ります。
要素の並び順、属性と子要素の相対的な位置もすべて保たれます。数値らしく見える値は読み込み時に解釈されるため、1.0と書かれたバージョン番号は1に、007と書かれたゼロ埋めの識別子は7になります。トークンとして扱っていた値は、変換後に確認しておく価値があります。
コメントは失われ、名前空間は単なる文字列の一部になり、属性と子要素の区別は文字列中の @ だけが頼りになります。INI にはスキーマ言語という概念自体がないため、検証もできなくなります。
これは方向性としては当然の結果です。XML は1998年から W3C の勧告として存在し、スキーマや XPath、変換や署名といった仕組みを持ちますが、INI は1985年から続く、行の並びだけの形式です。元の XML はバージョン管理に残しておくことをおすすめします。
この変換にたどり着く人の多くは、実際には文書全体ではなく、いくつかの設定値だけを必要としています。その場合は XML から値を読み取り、読み込み先が期待する形で INI に直接書いたほうが早く、読みやすい結果になります。
この変換が向いているのは、手作業で読むには量が多すぎる場合や、ベンダーの設定ファイルに何が入っているかを一通り把握したい場合です。変換した結果をそのまま新しい設定ファイルとして配布するのは避けてください。
XML の解析も INI への書き出しも、このページの JavaScript が行います。認証情報を含む設定ファイルであっても、外部に送信されることはありません。
| XML | INI | |
|---|---|---|
| 正式名称 | Extensible Markup Language | INI 設定ファイル |
| 拡張子 | .xml | .ini, .cfg, .conf |
| メディアタイプ | application/xml | text/plain |
| 最初の公開 | 1998 | 1985 |
| 発行元 | W3C | — |
| 仕様 | XML 1.0 | — |
| ライセンス | オープン標準 | オープン標準 |
| 現在の位置づけ | 現行 | 旧式、ただし今もどこでも読める |
| ブラウザで開けるか | すべてのブラウザ | 対応なし |
| 代わりに検討される形式 | JSON, YAML | TOML, YAML |
コメントは引き継がれます。XML にも INI にもコメントの構文があるので、あとで面倒を見る人のために残したメモが黙って消えることはありません。
INI を読めるブラウザーはありません。その点では、2 つのうち通用する場所が狭いのはこちらです。送る前に、受け取る側がこれを受け付けるかどうか確かめてください。
Visual Studio Codeは XML と INI のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。
2 つは狙っている用途が違います。XML はプログラム間のデータ受け渡し、INI は編集です。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。
XML は W3C の形式です(1998 年に登場)。 XML 1.0 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。
INI は 1985 年から使われています。NotepadとVisual Studio Codeがこの形式を読めます。
いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。
はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。
XML と INI は、内容の表し方が根本から違います。ですからこの変換は複製ではなく再構築です。誠実ではありますが、1 バイトも同じというわけではありません。 INI に入れ子はありません。1 階層より深い構造は、ドットでつないだキーに平らにされます。
INI を読めるブラウザーはありません。その点では、2 つのうち通用する場所が狭いのはこちらです。送る前に、受け取る側がこれを受け付けるかどうか確かめてください。