Dan*_*man 6 python elementtree
我正在尝试创建一个内存中的xml文档,以便root的子节点都需要一个名称空间.
最终文档看起来应该是这样的:
<Feed>
<FeedEntity Id="0000"
xmlns="http://schemas.example.com/search/query/2010/5/revision">
<FeedRequest locale="en-US" title="<some value>"/>
</FeedEntity>
... another FeedEntity element ...
</Feed>
Run Code Online (Sandbox Code Playgroud)
但是,当我打印出我使用ElementTree lib创建的文档时,它看起来更像是这样的:
<Feed>
<ns0:FeedEntity Id="0000"
xmlns:ns0="http://schemas.example.com/search/query/2010/5/revision">
<FeedRequest locale="en-US" title="<some value>"/>
</ns0:FeedEntity>
</Feed>
Run Code Online (Sandbox Code Playgroud)
这是我创建文档的方式:
counter = 0
namespace = "http://schemas.example.com/search/query/2010/5/revision"
root = Element("Feed")
node_name = "{%s}FeedEntity" % (namespace, );
feed_entity_element = Element(node_name)
feed_entity_element["Id"] = "%04d" % (counter,);
feed_request_element = Element("FeedRequest");
feed_request_element["Culture"] = self.culture;
feed_request_element["Query"] = address;
# append each of the elements to the xml document
feed_entity_element.append(feed_request_element);
root.append(feed_entity_element);
str_data = ET.tostring(root)
print str_data
Run Code Online (Sandbox Code Playgroud)
如何摆脱最终XML中的"ns0"部分,使其看起来更像上面提到的第一个例子?
使用xml.etree,您无法获得第一个示例中的确切输出,但您可以使用(全局)register_namespace()函数使用比"ns0"更好的前缀.例如:ET.register_namespace('rev', 'http://schemas.example.com/search/query/2010/5/revision')将确保输出看起来像rev:FeedEntity.
然而,(兼容的)lxml库在名称空间前缀方面更灵活,并允许您在创建元素时提供前缀映射.
| 归档时间: |
|
| 查看次数: |
9551 次 |
| 最近记录: |