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 解析器。我遇到了类似的问题,并为此编写了我的 xml 解析器,但事实证明,这不是微不足道的,并且可以改变很多。我不能推荐以下文章来更多地解释问题和常见方法:

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

如果你可以为此定义一个模式,你可以使用 jaxb - 又好又简单!

于 2012-10-01T11:59:33.940 回答
0

在每个名称的末尾附加一些独特的东西。Like 变成 Key0_unique ,其中 unique 是升序数字或 guid。

(虽然如果你的“生态系统”现在很大并且还在增长,我会考虑现在而不是以后解决这个问题。)

于 2012-11-09T10:49:28.437 回答