2

次のような 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 が非常に複雑 (名前空間、属性など) になる可能性があることは知っていますが、そうではありません。私が適切に解決する必要がある唯一の問題は、提示されたネストされた値と、同じキーの関連する多重度です。

4

2 に答える 2

0

xml-parser の sortf を使用するのが最善だと思います。同様の問題があり、そのためのxmlパーサーを作成しようとしましたが、結局のところ、それは簡単ではなく、かなり変更される可能性があります。問題と一般的なアプローチについて詳しく説明している次の記事はお勧めできません。

http://elegantcode.com/2010/08/07/dont-parse-that-xml/

そのためのスキーマを定義できる場合は、jaxb を使用できます。ナイスで簡単です。

于 2012-10-01T11:59:33.940 に答える