pythonxml解析器使用名称空间前缀,而不是默认的名称空间xmlns

2024-10-02 22:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用xml.etree解析一个XML,进行一些轻微的修改,并将修改后的内容写入另一个文件。你知道吗

import xml.etree.ElementTree as et
...
tree = et.parse(inputfile)
root = tree.getroot()
...
...
tree.write(outputfile)

XML输入为:

<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<Header>
<Security>
<Transport_key>
<EncryptedKey Id="TK" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
<CipherData>
<CipherValue>SV/7kINewjtWHpy6XvepsVOfcDhx/EEkFkY9uZZEmvg8Fz90OOiuPXPIy7eX395TPnS1anCnNulHcWHVnSBqyb4CeEStJsf3KRD7KanCHJc3T2jaHuqyBumHY8Hut1L29z/daUIFC3SbeYmKmviBwITr2kN6WfqtnQ3XPjrLz9hiWS+4Yh+k7lt0EQX3Osal5bqmfA3V65FYY2IX7vxwI9ZIWW4a7Nfw8EWCEo6X8tN8uN4xs4aKQaisTD6BjRHjsFqLf0i0Tt2oGpqCPuXG/E8rFqrck0PSa6tLxTzxkt80/w0upjI03EzTErVeayIVSPAzmVn3fkoYnqtMGYgL7UHIkcgptb7YZo5e65cxh7vlrcVgRAl8++7FVN9drmQoKJnu2DYWE3LFmbZTyEjQXaVxR3kuQvwyZUjennidG5z/V4HkJtTou738nAZwloS6A3sqHpLRhoUGvtpifKajuAK8FKwqLEhKIP4x5V5XUQyrwhpA+T0XMCGfOLVPY6L2iYCeoj9de6DXSgvwHbO2KSmQPfdoJ05+B2oLkwDLAIz6yGMAmk00CwjBe2sJkr4Gz9TTDx9OBRdRjVC/uf0CX2KVwsKFE5apt2YeNq4WE1b8ZRy6NPyZvVdxXjf4FpA0O8G3bdr96xHNmHlHJI57J2kmnUU2IHsOEbk1OSlBsN8=</CipherValue>
</CipherData>
</EncryptedKey>
</Transport_key>
</Security>
</Header>

输出为:

<Envelope xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ns0="http://www.w3.org/2001/04/xmlenc#">
<Header>
<Security>
<Transport_key>
<ns0:EncryptedKey Id="TK">
<ns0:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
<ns0:CipherData>
<ns0:CipherValue>SV/7kINewjtWHpy6XvepsVOfcDhx/EEkFkY9uZZEmvg8Fz90OOiuPXPIy7eX395TPnS1anCnNulHcWHVnSBqyb4CeEStJsf3KRD7KanCHJc3T2jaHuqyBumHY8Hut1L29z/daUIFC3SbeYmKmviBwITr2kN6WfqtnQ3XPjrLz9hiWS+4Yh+k7lt0EQX3Osal5bqmfA3V65FYY2IX7vxwI9ZIWW4a7Nfw8EWCEo6X8tN8uN4xs4aKQaisTD6BjRHjsFqLf0i0Tt2oGpqCPuXG/E8rFqrck0PSa6tLxTzxkt80/w0upjI03EzTErVeayIVSPAzmVn3fkoYnqtMGYgL7UHIkcgptb7YZo5e65cxh7vlrcVgRAl8++7FVN9drmQoKJnu2DYWE3LFmbZTyEjQXaVxR3kuQvwyZUjennidG5z/V4HkJtTou738nAZwloS6A3sqHpLRhoUGvtpifKajuAK8FKwqLEhKIP4x5V5XUQyrwhpA+T0XMCGfOLVPY6L2iYCeoj9de6DXSgvwHbO2KSmQPfdoJ05+B2oLkwDLAIz6yGMAmk00CwjBe2sJkr4Gz9TTDx9OBRdRjVC/uf0CX2KVwsKFE5apt2YeNq4WE1b8ZRy6NPyZvVdxXjf4FpA0O8G3bdr96xHNmHlHJI57J2kmnUU2IHsOEbk1OSlBsN8=</ns0:CipherValue>
</ns0:CipherData>
</ns0:EncryptedKey>
</Transport_key>
</Security>
</Header>

当然,这是一个完全有效的XML,尽管有点奇怪,因为命名的前缀ns0:XXX

我希望输出像上面的原始XML一样,使用xmlns=XXX绑定到所考虑的元素上,而不是使用xmlns:ns0=XXX。你知道吗

我试着用register_namespace,但没用。你知道吗

有解决办法吗?你知道吗


Tags: keyorghttpwwwxmlheadertransportsecurity