gpt4 book ai didi

带有 ":"的 lxml 标记名称

转载 作者:行者123 更新时间:2023-12-04 10:56:08 29 4
gpt4 key购买 nike

我正在尝试使用 lxml.etree 从 JSON 对象创建一个 xml 树。一些标记名在其中包含一个冒号,例如:-

“设置:当前”我尝试使用

'{settings}current' 作为标签名称,但我明白了:-

ns0:current xmlns:ns0="设置"

最佳答案

是的,首先阅读并理解 XML 命名空间。然后使用它来生成带有命名空间的 XML 树:u

>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace'}
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings'], nsmap=MY_NAMESPACES)
>>> etree.tostring(e)
'<settings:current xmlns:settings="http://example.com/url-for-settings-namespace"/>'

你可以将它与默认命名空间结合起来
>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace', None:    'http://example.com/url-for-default-namespace'}
>>> r=etree.Element('my-root', nsmap=MY_NAMESPACES)
>>> d=etree.Element('{%s}some-element' % MY_NAMESPACES[None])
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings'])
>>> d.append(e)
>>> r.append(d)
>>> etree.tostring(r)
'<my-root xmlns:settings="http://example.com/url-for-settings-namespace" xmlns="http://example.com/url-for-default-namespace"><some-element><settings:current/></some-element></my-root>'

注意,你必须有一个 nsmap=MY_NAMESPACES 的元素在您的 XML 树层次结构中。然后所有的后代节点都可以使用该声明。在你的情况下,你没有那一点,所以 lxml 生成命名空间名称,如 ns0
此外,当你创建一个新节点时,使用命名空间 URI 作为标签名称,而不是命名空间名称: {http://example.com/url-for-settings-namespace}current

关于带有 ":"的 lxml 标记名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8432912/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com