首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lxml创建没有根元素的XML片段?

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

Stack Overflow用户
提问于 2012-05-12 14:02:47
回答 1查看 2.3K关注 0票数 8

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

也就是说,是否有任何东西可以表示以下内容,而不需要创建另一个元素来同时保存它们:

代码语言:javascript
复制
<tree id="A"><anotherelement/></tree>
<tree id="B"><yetanotherelement/></tree>

在lxml文档中,我看不到允许这样做的任何东西,而且堆栈溢出似乎没有任何直接意义。

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-05-12 18:57:06

是的,lxml.html包中有这样的功能,称为fragment_fromstringfragments_fromstring,但在大多数情况下,html解析器也能很好地处理xml:

代码语言:javascript
复制
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)

产出:

代码语言:javascript
复制
<root>
  <tree id="A">
    <anotherelement/>
  </tree>
  <tree id="B">
    <yetanotherelement/>
  </tree>
</root>

如果您查看引擎盖下面是怎么回事,如果您对另一个结果不满意的话,使用xml解析器进行同样的操作可能并不困难。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10564419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档