このツールの動作
キーが要素に、値がその中身になります。
{ "user": { "name": "Ada", "port": 8080, "active": true } }
<user>
<name>Ada</name>
<port>8080</port>
<active>true</active>
</user>
根に複数のキーがある文書は <root> で包みます。XML の根要素はちょうど一つと決まっているためです。根が配列なら、その中で <item> の繰り返しになります。
ここで型は存在しなくなる
いまの出力をもう一度見てください。8080 も true も、いまやテキストです。かつて別のものだったと告げるものは、文書のどこにもありません。
これは変換の限界ではなく、XML とはそういうものだということです。XML 文書が運ぶのは構造とテキストです。型はスキーマ——XSD、DTD、RELAX NG——から来ます。それは文書の外に住んでおり、この変換に作り出す手立てはありません。
実務上の帰結ははっきり述べておきます。戻せば文字列になります。 {"port": 8080} は {"port": "8080"} として返ります。読む側が別の判断をしない限り——つまり推測しない限り——そうなります。そして推測は、1.10 のような版番号や 01234 のような郵便番号で外れます。
型を保ったまま往復させたいのなら、XML は行き先として適しません。XML が必要なら、戻りは不可逆だと織り込んでください。
キーは修復する。壊れたまま出さない
XML の要素名に空白は使えず、数字で始めることもできません。
| キー | 要素 |
|---|---|
user name | <user_name> |
2nd | <_2nd> |
そして二つのキーが同じ名前に修復されるときは、二つ目を user_name_1 にします。一つにまとめれば値が黙って消えます。この道具がとりわけ避けようとしているのがそれです。
属性と、往復について
"@_id" と書いたキーは属性に、"#text" は要素のテキストになります。
{ "user": { "@_id": "1", "#text": "Ada" } }
<user id="1">Ada</user>
XML から JSON への方向が出すのと同じ約束なので、XML から変換した文書は同じ形に戻ります。ただし型は、上で述べたとおり文字列になっています。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。