1 仕事を選ぶ
仕上げ方 平たく圧縮したものは、読むためだけにあった空白をすべて取り除いた同じ文書です。
いちばん外側の要素の名前 XMLは頂点にひとつだけ要素を持ちますが、JSONは持ちません。だから、ひとつこしらえる必要があります。
2 貼り付ける
3 結果を持ち出す
# XMLフォーマッター — 整形、圧縮、JSONへの変換 読むために整えたXML、送るために平たく圧縮したXML、そして双方向のJSON変換。そのどれも、よそのサーバーに貼り付けられることはありません。 > XMLの整形・インデント・圧縮と、XMLからJSON、JSONからXMLへの変換。パーサーはあなたのブラウザで動き、何もアップロードされないので、フィードも請求書も設定ファイルも端末を離れません。 これはhttps://abox.tools/ja/xml-formatter/にあるブラウザー用の対話型ツールです。ファイルはそのブラウザーを実行する端末上で処理します。意図した共有や任意の通信機能はページ内で説明します。以下は文章による説明です。利用するにはアドレスを開いてください。 ## XMLとJSONは**ブラウザー内で処理**されます。処理のためのアップロードはありません。 整形も変換も文字列に対する計算で、それをここ、このページで行います。パーサーは手書きで`src/shared/parse-xml.js`にあり、それ以上のものはありません。この道具にはネットワーク機能そのものがなく、取りに行くものも送るものもありません。それは「XML」という語から想像されるより重い意味を持ちます。この形式で届くものは、たいてい請求書か、口座明細か、診療記録か、ヘッダーに誰かの資格情報が入ったSOAPの本文だからです。 - ✗ アップロードなし - ✗ 登録なし - ✗ サイズ制限なし - ✓ オフラインで動作 - ✓ ソース公開 ## XMLをアップロードせずに整形する手順 1. **仕事を選びます。** タブは二つ、入力欄は一つです。*整形*はXMLを整えるか平たく圧縮し、*変換*はJSONに、あるいはJSONをXMLに戻します。いま整えたXMLがそのまま変換するXMLなので、二度貼り付ける必要はありません。 2. **貼り付けるか、ファイルを置きます。** 選択してコピーできるものなら何でも構いません。`.xml`・`.svg`・`.rss`・`.xsd`のファイルを選択欄に置けば、ご自分のブラウザがそれを読んで欄に入れます。省くべきアップロードの段階自体がありません。 3. **インデントを選ぶか、平たく圧縮します。** 半角空白2つ、4つ、またはタブ。平たく圧縮したものは、読むためだけにあった空白をすべて取り除いた同じ文書で、結果には何バイト減ったかが表示されます。 4. **エラーのある場所でエラーを読みます。** ここで失敗したパーサーは、ブラウザが一括で読んだ文書について言う「1行目でエラー」ではなく、*どのタグ*が閉じられていないかを、行と列とともに伝えます。*エラー位置へ移動*を押すと、入力内のその位置に戻れます。入力中は、移動を指示するまでフォーカスは変わりません。 5. **結果を持ち帰ります。** コピーするか、出てきた形式の名前が付いたファイルとしてダウンロードします。 ## 詳しい解説 [XMLを整形して確認する方法](https://abox.tools/ja/guides/format-and-check-xml/): XMLをローカルで整形、圧縮、確認します。解析エラーをたどり、JSONへ変換する前に属性、テキスト、配列の対応を理解します。 ## 箱の中のほかのツール - [テキスト差分](https://abox.tools/ja/text-diff/): 2つのテキストを入れると、すべての違いが行単位・単語単位で印付きで出てきます。よそのサーバーに貼り付けるものは何もありません。 - [Base64エンコーダー・デコーダー](https://abox.tools/ja/base64/): Base64、パーセントエンコード、HTMLエンティティ、16進、バックスラッシュのエスケープを双方向で。よそのサーバーに貼り付けるものは何もありません。 - [テキストとファイルの共有](https://abox.tools/ja/share-text/): 共有はこの開いたタブの中だけに存在します。読む側は暗号化された内容をあなたのブラウザから直接受け取り、タブを閉じれば終わり。どのサーバーにも何も残りません。 - [QRコード・バーコード作成ツール](https://abox.tools/ja/qr-barcode/): 打ち込めば、そのままコードになります。作るために何かを送ることはありません。 ## よくある質問 ### 私のXMLはどこかにアップロードされますか? されません。このページのパーサーもプリンターも、ご自分のブラウザの中で、ご自分のハードウェア上で動く関数です。この道具にはネットワーク機能そのものがなく、何かを取りに行くことも送ることもありません。ページの`Content-Security-Policy`には接続してよいアドレスがすべて書かれていて、そのどれもこのサイトのものではありません。これはXMLでは、この形式の評判から想像されるより重い話です。ここに届くものは、たいてい請求書か、口座明細か、診療記録か、ヘッダーに資格情報が入ったSOAPリクエストだからです。 ### 外部実体は解決されますか? されませんし、切るべき設定もありません。外部実体の解決は、実行中の端末のファイルをXMLパーサーに読ませるための手口で、ふつうXXEと書かれる攻撃です。`src/shared/parse-xml.js`は実体解決をまったく持たない手書きの読み取り器です。あなたのテキストがブラウザ自身の`DOMParser`へ渡ることもありません。`DOCTYPE`は、一度も実行されないまま素通りします。 ### XMLをJSONに変換すると何が失われますか? 混在内容の順序、コメント、そして属性と子要素の違いです。最後のものは消えるというより和らげられます。属性は名前が`@`で始まるメンバーになるからです。要素自身のテキストは、ほかのものと並ぶ必要があるとき`#text`になり、繰り返す子は配列になります。値はすべて文字列のままです。XMLに型はなく、`8080`が数値だったと決めるのは情報を作り出すことになります。 ### JSONをXMLに変換すると何が失われますか? 空のオブジェクト、空の配列、空文字列の違いです。三つとも空の要素になります。そしてすべての値の型も失われます。XMLに型がないからです。配列は繰り返す要素になり、それが読み戻せる唯一の形です。要素名にできないキーは、どのパーサーも読まない文書を吐き出す代わりに、扱いにくい文字を置き換えます。 ### SVGやRSSフィード、POMファイルも整形できますか? できます。三つともXMLで、これは特定の方言ではなくXMLを読みます。こうして整えたSVGは手で編集しやすくなりますし、RSSやAtomのフィードはたいてい平たく圧縮された状態で配られていて、何かが開くまで読めません。並べ方は文書の意味を何も変えません。 ### インデントを付け直すとXMLの意味は変わりますか? 要素が要素を含む文書については変わりません。関わってくるのはテキストです。語を含む要素の内側の空白はそのテキストの一部なので、テキストだけを含む要素は開かずに1行のままにします。`CDATA`の区間は、そっくりそのまま写されます。 ### ブラウザ自身のXMLパーサーを使わないのはなぜですか? 文書が壊れているときに何を言うかが理由です。`DOMParser`が返すのはエラー文書で、その文言はブラウザごとに違い、多くは「1行目でエラー」に落ち着きます。手書きの読み取り器なら、どのタグが閉じられていないか、それがどこで開かれたかを言えます。知りたかったのはまさにそれです。外部実体を解決しないことが、もう一つの理由です。 ### どれくらい大きいファイルまで扱えますか? ここに制限は設けていません。その費用を払うサーバーがないからです。実際の上限はご自分の端末です。数メガバイトのXMLなら問題なく、とても長い文書のときは、キーボードを奪い合う代わりに入力が止むのを待ってから整形し直します。 ### 無料ですか。アカウントは必要ですか? 無料です。アカウントも、サインインも、試用期間もなく、貼り付ける量にも制限はありません。このサイトには広告があり、それが費用をまかなっています。広告にはあなたのテキストについて何も渡されません。 ### オフラインでも動きますか? 動きます。ページを一度読み込んだあとインターネットを切っても、そのまま使えます。これは何もアップロードされていないことを示す一番簡単な方法でもあります。整形のためにXMLを送り出す道具なら、線を抜いた瞬間に止まってしまうはずです。 ## この主張を確かめる方法 - **処理はこのブラウザー内で行います。** 入力と結果はブラウザー内で処理し、処理コードはそれらを処理用にアップロードしません。Content-Security-Policyは資源と接続先を制限しますが、許可済みの相手はリクエストを受け取れます。内容は検査せず、何も送られないことを単独で証明しません。具体的な操作の要求とソースを比較するか、切断中にローカル操作を完了してください。 - **ここからは何も取りに行きません。** `src/`のどこにも`fetch`も`XMLHttpRequest`も`sendBeacon`もありません。パーサーもプリンターも、文字列を受け取って文字列を返す、このページの中の関数です。 - **外部実体は、決して解決されません。** 外部実体を含む`DOCTYPE`は、解析している端末のファイルをXMLパーサーに読ませるための手口で、この形式の最も古い穴です。`src/shared/parse-xml.js`は手書きの読み取り器で、実体解決の仕組みがそもそも入っていません。無効にしてあるのではなく、存在しないのです。そしてこのページは、あなたのテキストをブラウザ自身の`DOMParser`へ渡すこともありません。 - **XMLから出てくる値は、すべて文字列です。** `<port>8080</port>`はそれが数値かどうかについて何も言っていないので、JSONは`"8080"`と書きます。こちらで決めてしまうのは、ファイルに書いてあったかのように以後ずっと持ち回られる情報を、こちらで作り出すことです。 - **Googleが読み込むものと、渡されないもの。** 広告と計測のスクリプトはGoogleから、寄付ボタンはBuy Me a Coffeeから来ます。そのどれにも、あなたのテキストは1文字も渡されません。それを読み、解析し、書き出すすべての行は、このオリジンから配信され、リポジトリに載っています。 - **オフラインで動きます。** ネットワークを切っても道具は何も変わりません。もともとネットワークの段階がなかったからです。これが何よりも簡単な証明です。 **自分で確かめてください。**以上のどれも、鵜呑みにする必要はありません。このページは、リポジトリにあるテンプレートと設定から、誰でも読んで実行できるビルドスクリプトが生成しています。その結果は`dist`ブランチに置いてあるので、配信されているものと、ソースをビルドした結果とを差分で比べられます。 https://github.com/A-Box-of-Tools/website まず読むとよいのは、Content-Security-Policyについては`config/site.toml`、どのタグが閉じられていないかを教えてくれるパーサーは`src/shared/parse-xml.js`、XMLから出てくる値がなぜ推測されずにすべて文字列のままなのかは`src/convert.js`をご覧ください。
XMLをアップロードせずに整形する手順
- 仕事を選びます。タブは二つ、入力欄は一つです。整形はXMLを整えるか平たく圧縮し、変換はJSONに、あるいはJSONをXMLに戻します。いま整えたXMLがそのまま変換するXMLなので、二度貼り付ける必要はありません。
- 貼り付けるか、ファイルを置きます。選択してコピーできるものなら何でも構いません。
.xml・.svg・.rss・.xsdのファイルを選択欄に置けば、ご自分のブラウザがそれを読んで欄に入れます。省くべきアップロードの段階自体がありません。 - インデントを選ぶか、平たく圧縮します。半角空白2つ、4つ、またはタブ。平たく圧縮したものは、読むためだけにあった空白をすべて取り除いた同じ文書で、結果には何バイト減ったかが表示されます。
- エラーのある場所でエラーを読みます。ここで失敗したパーサーは、ブラウザが一括で読んだ文書について言う「1行目でエラー」ではなく、どのタグが閉じられていないかを、行と列とともに伝えます。エラー位置へ移動を押すと、入力内のその位置に戻れます。入力中は、移動を指示するまでフォーカスは変わりません。
- 結果を持ち帰ります。コピーするか、出てきた形式の名前が付いたファイルとしてダウンロードします。
詳しい解説
XMLを整形して確認する方法 XMLをローカルで整形、圧縮、確認します。解析エラーをたどり、JSONへ変換する前に属性、テキスト、配列の対応を理解します。
箱の中のほかのツール
よくある質問
私のXMLはどこかにアップロードされますか?
されません。このページのパーサーもプリンターも、ご自分のブラウザの中で、ご自分のハードウェア上で動く関数です。この道具にはネットワーク機能そのものがなく、何かを取りに行くことも送ることもありません。ページのContent-Security-Policyには接続してよいアドレスがすべて書かれていて、そのどれもこのサイトのものではありません。これはXMLでは、この形式の評判から想像されるより重い話です。ここに届くものは、たいてい請求書か、口座明細か、診療記録か、ヘッダーに資格情報が入ったSOAPリクエストだからです。
外部実体は解決されますか?
されませんし、切るべき設定もありません。外部実体の解決は、実行中の端末のファイルをXMLパーサーに読ませるための手口で、ふつうXXEと書かれる攻撃です。src/shared/parse-xml.jsは実体解決をまったく持たない手書きの読み取り器です。あなたのテキストがブラウザ自身のDOMParserへ渡ることもありません。DOCTYPEは、一度も実行されないまま素通りします。
XMLをJSONに変換すると何が失われますか?
混在内容の順序、コメント、そして属性と子要素の違いです。最後のものは消えるというより和らげられます。属性は名前が@で始まるメンバーになるからです。要素自身のテキストは、ほかのものと並ぶ必要があるとき#textになり、繰り返す子は配列になります。値はすべて文字列のままです。XMLに型はなく、8080が数値だったと決めるのは情報を作り出すことになります。
JSONをXMLに変換すると何が失われますか?
空のオブジェクト、空の配列、空文字列の違いです。三つとも空の要素になります。そしてすべての値の型も失われます。XMLに型がないからです。配列は繰り返す要素になり、それが読み戻せる唯一の形です。要素名にできないキーは、どのパーサーも読まない文書を吐き出す代わりに、扱いにくい文字を置き換えます。
SVGやRSSフィード、POMファイルも整形できますか?
できます。三つともXMLで、これは特定の方言ではなくXMLを読みます。こうして整えたSVGは手で編集しやすくなりますし、RSSやAtomのフィードはたいてい平たく圧縮された状態で配られていて、何かが開くまで読めません。並べ方は文書の意味を何も変えません。
インデントを付け直すとXMLの意味は変わりますか?
要素が要素を含む文書については変わりません。関わってくるのはテキストです。語を含む要素の内側の空白はそのテキストの一部なので、テキストだけを含む要素は開かずに1行のままにします。CDATAの区間は、そっくりそのまま写されます。
ブラウザ自身のXMLパーサーを使わないのはなぜですか?
文書が壊れているときに何を言うかが理由です。DOMParserが返すのはエラー文書で、その文言はブラウザごとに違い、多くは「1行目でエラー」に落ち着きます。手書きの読み取り器なら、どのタグが閉じられていないか、それがどこで開かれたかを言えます。知りたかったのはまさにそれです。外部実体を解決しないことが、もう一つの理由です。
どれくらい大きいファイルまで扱えますか?
ここに制限は設けていません。その費用を払うサーバーがないからです。実際の上限はご自分の端末です。数メガバイトのXMLなら問題なく、とても長い文書のときは、キーボードを奪い合う代わりに入力が止むのを待ってから整形し直します。
無料ですか。アカウントは必要ですか?
無料です。アカウントも、サインインも、試用期間もなく、貼り付ける量にも制限はありません。このサイトには広告があり、それが費用をまかなっています。広告にはあなたのテキストについて何も渡されません。
オフラインでも動きますか?
動きます。ページを一度読み込んだあとインターネットを切っても、そのまま使えます。これは何もアップロードされていないことを示す一番簡単な方法でもあります。整形のためにXMLを送り出す道具なら、線を抜いた瞬間に止まってしまうはずです。