gpt4 book ai didi

python - lxml 创建没有根元素的 XML 片段?

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:25 26 4
gpt4 key购买 nike

是否可以使用 lxml(或内置的 etree 库)创建一个表示 xml 片段的对象,但包含两个(或更多)不相交的树(即每棵树都有自己单独的根,但它们没有共同点祖先)?

也就是说,是否可以在不创建另一个元素来容纳它们的情况下表示以下内容:

<tree id="A"><anotherelement/></tree>
<tree id="B"><yetanotherelement/></tree>

我在 lxml 文档中看不到任何允许这样做的内容,而且 stackoverflow 似乎没有任何直接的要点。

这里的用例是我以编程方式生成 xml,片段将组合成一个文档以供输出。我想要一个不需要迭代的对象/特殊情况,只需将其传递给 lxml 方法,就好像它是一棵合适的树一样。

(我知道这样的片段本身不会是一个完整和正确的 xml 文档;我想在组装成这样的文档之前存储中间产品)。

最佳答案

是的,在lxml.html包中有这样一个功能,叫做fragment_fromstring或者fragments_fromstring,但是在大多数情况下html解析器也能很好地处理 xml:

from lxml import etree, html

xml = """
<tree id="A"><anotherelement/></tree>
<tree id="B"><yetanotherelement/></tree>
"""

fragments = html.fragments_fromstring(xml)

root = etree.Element("root")
for f in fragments:
root.append(f)

print etree.tostring(root, pretty_print=True)

输出:

<root>
<tree id="A">
<anotherelement/>
</tree>
<tree id="B">
<yetanotherelement/>
</tree>
</root>

如果你看what's going on under the hood , 如果您对其他结果不满意,使用 xml 解析器执行相同的操作可能不会太困难。

关于python - lxml 创建没有根元素的 XML 片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10564419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com