lxml.etree 和 xml.etree.ElementTree 添加没有前缀的命名空间(ns0、ns1 等)
有没有任何解决方案可以添加不带前缀的名称空间(我的意思是这些 ns0、ns1),该名称空间适用于所有 etree 实现,或者每个都有可行的解决方案?
现在我有以下解决方案:
- lxml - 元素的 nsmap 参数
- (c)ElementTree(python 2.6+) - 使用空字符串作为前缀注册命名空间方法
问题是 ( c)python 2.5中的ElementTree,我知道有 _namespace_map 属性,但将其设置为空字符串创建无效的XML,将其设置为 None 添加默认的 ns0 等命名空间,有什么可行的解决方案吗?
我想
Element('foo', {'xmlns': 'http://my_namespace_url.org/my_ns'})
这是一个坏主意?
感谢您的帮助
There is any solution to add namespaces without prefix(i mean these ns0, ns1) which working on all the etree implementations or there are working solutions for each one?
For now I have solutions for:
- lxml - nsmap argument of Element
- (c)ElementTree(python 2.6+) - register namespace method with empty string as a prefix
The problem is (c)ElementTree in python 2.5, I know there is _namespace_map attribute but setting it to empty string creating invalid XML, setting it to None adding default ns0 etc. namespaces, is there any working solution?
I guess
Element('foo', {'xmlns': 'http://my_namespace_url.org/my_ns'})
is a bad idea?
Thanks for help
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我刚刚为你工作了。
定义您自己的前缀:
然后,替换/删除输出上的前缀:
可能有更好的解决方案。
I have just work around for you.
Define your own prefix:
And then, replace/remove the prefix on the output:
Probably, there is better solution.
我使用了 Jiri 的想法,但在 unique 也是默认命名空间的情况下我添加了额外的一行:
I used Jiri's idea, but I added an extra line in the case when unique is also the default namespace:
我正在使用 Python 3.3.1,以下内容对我有用:
好处是您不必访问私有 xml.etree.ElementTree._namespace_map 作为 Jiri建议。
我发现 Python 2.7.4 中也提供了同样的功能。
I'm using Python 3.3.1 and the following works for me:
The upside is that you don't have to access the private xml.etree.ElementTree._namespace_map as Jiri suggested.
I see the same is also available in Python 2.7.4.