Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python lxml是否创建没有根元素的XML片段?_Python_Xml_Lxml - Fatal编程技术网

Python lxml是否创建没有根元素的XML片段?

Python lxml是否创建没有根元素的XML片段?,python,xml,lxml,Python,Xml,Lxml,是否可以使用lxml(或内置的etree库)创建一个表示xml片段但包含两个(或更多)不相交树的对象(即,每棵树都有自己独立的根,但它们没有共同的祖先) 也就是说,是否有任何东西可以表示以下内容,而无需创建另一个元素来容纳这两个内容: <tree id="A"><anotherelement/></tree> <tree id="B"><yetanotherelement/></tree> 我在lxml文档中看不到任何

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

也就是说,是否有任何东西可以表示以下内容,而无需创建另一个元素来容纳这两个内容:

<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>