是否可以使用lxml (或builtin etree库)创建一个表示xml片段的对象,但包含两个(或更多)不相交的树(即每棵树都有自己的独立根,但它们没有共同的祖先)?
也就是说,是否有任何东西可以表示以下内容,而不需要创建另一个元素来同时保存它们:
<tree id="A"><anotherelement/></tree>
<tree id="B"><yetanotherelement/></tree>在lxml文档中,我看不到允许这样做的任何东西,而且堆栈溢出似乎没有任何直接意义。
这里的用例是,我是以编程方式生成xml的,这些片段将被组装成一个文档以供输出。我想要一个不需要迭代/特殊情况的对象,只需将它传递给lxml方法,就像它是一个适当的树一样。
(我知道这些片段本身并不是一个完整和正确的xml文档;我希望在组装之前将中间产品存储到这样的文档中)。
发布于 2012-05-12 18:57:06
是的,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>如果您查看引擎盖下面是怎么回事,如果您对另一个结果不满意的话,使用xml解析器进行同样的操作可能并不困难。
https://stackoverflow.com/questions/10564419
复制相似问题