我正在使用LXML的incremental XML generation构建一个大型XML文件。我需要对一些定义为根元素一部分的子元素应用一个名称空间(rss
),但是似乎增量XML生成特性提供的上下文管理器没有将根名称空间映射传递给子节点。举个例子:
from lxml import etree
FILENAME = "somefile.xml"
NSMAP = {"myns": "http://example.com/"}
with open(FILENAME, "wb") as f:
# create XML streamer
with etree.xmlfile(f) as xf:
# root element
with xf.element("root", version="1.0", nsmap=NSMAP):
with xf.element("channel"):
title = etree.Element("{http://example.com/}title", nsmap=NSMAP)
title.text = "some text"
xf.write(title)
这将生成以下XML文件:
<root xmlns:myns="http://example.com/" version="1.0">
<channel>
<myns:title xmlns:myns="http://example.com/">some text</myns:title>
</channel>
</root>
在上面的例子中,xmlns:myns
属性设置了两次,都是在root
和title
上。理想情况下,只在根节点上定义一次:
<root xmlns:myns="http://example.com/" version="1.0">
<channel>
<myns:title>some text</myns:title>
</channel>
</root>
通常,在构建XML文档时,只需使用etree.SubElement
将根节点传递给子节点,这样子元素就可以查找根命名空间映射,但在这种情况下,上下文管理器似乎可以防止这种情况发生。在使用增量XML生成时,有没有一种方法可以实现这一点
目前没有回答
相关问题 更多 >
编程相关推荐