如何使用xml.etree.ElementTreePython格式化属性、前缀和标记



我正在尝试创建一个python脚本,该脚本将创建一个模式,然后根据现有引用填充数据。

这就是我需要创建的:

<srp:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

这就是我的

from xml.etree.ElementTree import *
from xml.dom import minidom
def prettify(elem):
rough_string = tostring(elem, "utf-8")
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="  ")
ns = { "SOAP-ENV": "http://www.w3.org/2003/05/soap-envelope", 
"SOAP-ENC": "http://www.w3.org/2003/05/soap-encoding",
"xsi": "http://www.w3.org/2001/XMLSchema-instance",
"srp": "http://www.-redacted-standards.org/Schemas/MSRP.xsd"}
def gen():
root = Element(QName(ns["xsi"],'root'))
print(prettify(root))
gen()

这给了我:

<xsi:root xmlns:xsi=";http://www.w3.org/2001/XMLSchema-instance"gt;

如何修复它以使正面匹配?

您要求的确切结果是不完整的,但只要对gen()函数进行一些编辑,就可以生成格式良好的输出。

根元素应该绑定到http://www.-redacted-standards.org/Schemas/MSRP.xsd命名空间(srp前缀(。为了生成xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"声明,必须在XML文档中使用命名空间。

def gen():
root = Element(QName(ns["srp"], 'root'))
root.set(QName(ns["xsi"], "schemaLocation"), "whatever") # Add xsi:schemaLocation attribute

register_namespace("srp", ns["srp"])                     # Needed to get 'srp' instead of 'ns0'

print(prettify(root))

结果(为可读性添加换行符(:

<?xml version="1.0" ?>
<srp:root xmlns:srp="http://www.-redacted-standards.org/Schemas/MSRP.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="whatever"/>

相关内容

  • 没有找到相关文章

最新更新