次のような XML ファイルがありました。
<root>
<key0>value</key0>
<key1>value</key1>
<key2>value</key2>
</root>
このようなファイルをキーと値の構造に変換するのは簡単です。たとえば、Python dict で結果を紹介しましょう。
{'key0': 'value', 'key1': 'value', 'key2': 'value'}
今、彼らはネストされた要素を追加しました:
<root>
<key0>value</key0>
<key1>value</key1>
<key2>value</key2>
<key3>
<sth0>value</sth0>
<sth1>value</sth1>
</key3>
</root>
まだ簡単です:
{'key0': 'value', 'key1': 'value', 'key2': 'value', 'key3/sth0': 'value', 'key3/sth1': 'value'}
あなたは要点を得たと思います。さて、これはどうですか?
<root>
<key0>value</key0>
<key1>value</key1>
<key1>
<inner>value</inner>
</key1>
<key2>value</key2>
<key3>
<sth0>value</sth0>
<sth1>value</sth1>
</key3>
<key3>
<sth0>different value</sth0>
<sth1>different value</sth1>
</key3>
<key3>
<sth0>blah blah</sth0>
<sth1>blah blah</sth1>
</key3>
</root>
もちろん、しばらく考えてから何かを思いつくこともできますが、次から次へと困難に直面するだろうと何かが教えてくれます。問題は、同様に単純な XML ファイルの値をキーと値の形式に「シリアル化」するための複雑なアルゴリズムがあるかどうかです。決定論的にシリアル化可能およびシリアル化解除可能である必要があり、値が失われることはありません。要素の順序は問題ではありません (例の Python dict はランダムな選択ではなく、実際に取得しようとしているものです)。
XML が非常に複雑 (名前空間、属性など) になる可能性があることは知っていますが、そうではありません。私が適切に解決する必要がある唯一の問題は、提示されたネストされた値と、同じキーの関連する多重度です。