Python lxml是否创建没有根元素的XML片段?
是否可以使用lxml(或内置的etree库)创建一个表示xml片段但包含两个(或更多)不相交树的对象(即,每棵树都有自己独立的根,但它们没有共同的祖先) 也就是说,是否有任何东西可以表示以下内容,而无需创建另一个元素来容纳这两个内容:Python lxml是否创建没有根元素的XML片段?,python,xml,lxml,Python,Xml,Lxml,是否可以使用lxml(或内置的etree库)创建一个表示xml片段但包含两个(或更多)不相交树的对象(即,每棵树都有自己独立的根,但它们没有共同的祖先) 也就是说,是否有任何东西可以表示以下内容,而无需创建另一个元素来容纳这两个内容: <tree id="A"><anotherelement/></tree> <tree id="B"><yetanotherelement/></tree> 我在lxml文档中看不到任何
<tree id="A"><anotherelement/></tree>
<tree id="B"><yetanotherelement/></tree>
我在lxml文档中看不到任何允许这样做的内容,而且stackoverflow似乎没有任何直接说明这一点的内容
这里的用例是,我以编程方式生成xml,片段将组装到一个文档中进行输出。我想要一个不需要迭代的对象/特殊情况,只需将其作为正确的树传递给lxml方法即可。
(我知道这些片段本身并不是一个完整正确的xml文档;我想在组装成这样一个文档之前存储中间产品)。是的,在
lxml.html
包中有这样一个功能,它被称为fragment\u fromstring
或fragments\u 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)
从lxml导入etree,html
xml=”“”
,如果您对另一个结果不满意,那么使用xml解析器执行同样的操作可能不会太困难。只创建一个lxml对象列表怎么样?这正是您所拥有的…@larsks是的,但是我需要编写代码来处理列表的存在,而不是传递xml API所期望的类型的对象。这也需要在我的代码中使用特殊的大小写,或者总是保留一个列表。这就是为什么它更可取的原因。谢谢。我实际上想通过编程方式创建片段,所以我会偷偷地看。啊,它仍然返回一个列表-我希望有一种方法可以创建一个不需要迭代的对象/special在这种情况下,只要把lxml方法当作一个合适的树来传递就行了。我将在接下来的几天内接受这个答案,假设没有其他人知道某种神奇的方法。+1但一定要知道fragments\u fromstring()
返回一个列表和fragments\u fromstring()
只保留一个元素请注意,html.fragments\u fromstring
不会保留标记名的大小写(它会将它们全部转换为小写),而lxml.fromstring
会保留。
<root>
<tree id="A">
<anotherelement/>
</tree>
<tree id="B">
<yetanotherelement/>
</tree>
</root>