合并XML元素,同时使用python保留内容

时间:2014-08-01 08:10:41

标签: python xml

我一直在寻找一种从XML文档中删除元素的方法,同时使用Python保留内容,但我无法找到有效的答案。

基本上,我收到了以下格式的XML文档(示例):

<root>
    <element1>
        <element2>
            <text> random text </text>
        </element2>
    </element1>
    <element1>
        <element3>
            <text> random text </text>
        </element3>
    </element1>
</root>

我要做的是将element2和element3合并到element1中,以便输出XML文档如下所示:

<root>
    <element1>
        <element2>
            <text> random text </text>
        </element2>
        <element3>
            <text> random text </text>
        </element3>
    </element1>
</root>

我很欣赏有关我(希望)简单问题的一些提示。

注意:我对Python也有些新意,所以请耐心等待。

1 个答案:

答案 0 :(得分:0)

这可能不是最漂亮的解决方案,但由于还没有其他答案......

您可以搜索,例如</element1><element1>,并将其替换为空字符串。

xml = """<root>
    <element1>
        <element2>
            <text> random text </text>
        </element2>
    </element1>
    <element1>
        <element3>
            <text> random text </text>
        </element3>
    </element1>
</root>"""

import re
print re.sub(r"\s*</element1>\s*<element1>", "", xml)

或者更一般地,re.sub(r"\s*</([a-zA-Z0-9_]+)>\s*<\1>", "", xml)合并同一元素的所有连续实例,方法是将第一个元素名称作为一个组进行匹配,然后使用\1查找该组。

两种情况下的输出:

<root>
    <element1>
        <element2>
            <text> random text </text>
        </element2>
        <element3>
            <text> random text </text>
        </element3>
    </element1>
</root>

对于更复杂的文档,您可能希望使用Python's many XML libraries之一。