0

尝试使用xmltodict.unparse

我在json中有这个结构:

"organisations": [
    {"organisation": "org1"}, 
    {"organisation": "org2"}, 
    {"organisation": "org3"}
]

但是在xml中是这样的:

<organisations><organisation>org1</organisation></organisations>
<organisations><organisation>org2</organisation></organisations>
<organisations><organisation>org2</organisation></organisations>

我想要这样:

<organisations>
    <organisation>org1</organisation>
    <organisation>org2</organisation>
    <organisation>org2</organisation>
</organisations>

我正在使用 xmltodict.unparse

def dict_to_xml(d, pretty_print=False, indent=DEFAULT_INDENT, document_root="root"):
    if len(d.keys()) != 1:
        d = {
            document_root: d
        }

    res = xmltodict.unparse(d, indent=indent, short_empty_elements=True)

    if pretty_print:
        res = pretty_print_xml(res).strip()

    return res

任何人都知道在不破解 xmltodict 的情况下该怎么做?

谢谢

4

1 回答 1

0

我不太了解 XML,但我对这个问题感到好奇并注意到:

在字典中的键下指定的列表使用该键作为每个项目的标签。

我的方法是对你所追求的结果进行逆向工程:

expected = '''
    <organisations>
        <organisation>org1</organisation>
        <organisation>org2</organisation>
        <organisation>org2</organisation>
    </organisations>
'''

print(json.dumps(xmltodict.parse(expected), indent=4))

输出:

{
    "organisations": {
        "organisation": [
            "org1",
            "org2",
            "org2"
        ]
    }
}

而“往返”,给出了你所追求的结果:

reverse = {
    "organisations": {
        "organisation": [
            "org1",
            "org2",
            "org2"
        ]
    }
}

print(xmltodict.unparse(reverse, pretty=True))

输出:

<?xml version="1.0" encoding="utf-8"?>
<organisations>
    <organisation>org1</organisation>
    <organisation>org2</organisation>
    <organisation>org2</organisation>
</organisations>

于 2019-11-08T12:11:43.580 回答