簡體   English   中英

lxml創建沒有根元素的XML片段?

[英]lxml Create XML fragment with no root element?

是否可以使用lxml(或內置etree庫)創建一個表示xml片段的對象,但包含兩個(或更多)不相交的樹(即每個樹都有自己獨立的根,但它們沒有共同的祖先)?

也就是說,是否有任何可以代表以下內容而不創建另一個元素來保存它們:

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

我在lxml文檔中看不到任何可以允許的內容,而stackoverflow似乎沒有任何直接的東西。

這里的用例是我以編程方式生成xml,並將片段組裝到一個文檔中進行輸出。 我想要一個我不需要迭代/特殊情況的對象,只需傳遞給lxml方法就好像它是一個合適的樹。

(我知道這些片段本身並不是一個完整而正確的xml文檔;我想在組裝之前將中間產品存儲到這樣的文檔中)。

是的, lxml.html包中有這樣的功能,它叫做fragment_fromstringfragments_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解析器做同樣的事情可能不會太困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM