Forcing xml.etree to output “unused” namespaces

夙愿已清 提交于 2019-12-07 09:01:41

问题


I'm trying to create shibboleth configuration files using xml.etree in python, and I'm having problems with it omitting namespace assignments when it output the finished document. I'm pretty sure that it's the problem described in Outputting an “unused” XML namespace using ElementTree

I declare them...

namespaces = {
    'resolver': 'urn:mace:shibboleth:2.0:resolver',
    'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
    'pc': 'urn:mace:shibboleth:2.0:resolver:pc',
    'ad': 'urn:mace:shibboleth:2.0:resolver:ad',
    'dc': 'urn:mace:shibboleth:2.0:resolver:dc',
    'enc': 'urn:mace:shibboleth:2.0:attribute:encoder',
    'sec': 'urn:mace:shibboleth:2.0:security',
}

for prefix, uri in namespaces.iteritems():
    ET.register_namespace(prefix, uri)

If I print out the namespaces that have been defined for the document...

print json.dumps( ET._namespace_map, indent=True )

I see my namespaces there..

{
 "urn:mace:shibboleth:2.0:resolver:pc": "pc", 
 "http://schemas.xmlsoap.org/wsdl/": "wsdl", 
 "urn:mace:shibboleth:2.0:resolver:ad": "ad", 
 "urn:mace:shibboleth:2.0:resolver": "resolver", 
 "http://www.w3.org/1999/xhtml": "html", 
 "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", 
 "urn:mace:shibboleth:2.0:security": "sec", 
 "urn:mace:shibboleth:2.0:attribute:encoder": "enc", 
 "http://www.w3.org/2001/XMLSchema": "xs", 
 "http://www.w3.org/2001/XMLSchema-instance": "xsi", 
 "http://www.w3.org/XML/1998/namespace": "xml", 
 "urn:mace:shibboleth:2.0:resolver:dc": "dc"
}

When I write the document to a file, or dump it to stdout, it omits the "enc" and "pc" namespaces. Like the other question, "enc" and "pc" aren't used to qualify elements, but are used in qualifying attribute values. I could force them to show up by adding them to the document manually...

root.set("xmlns:enc", "urn:mace:shibboleth:2.0:attribute:encoder")
root.set("xmlns:pc", "urn:mace:shibboleth:2.0:resolver:pc")

It feels like I shouldn't have to do that. Is there a way to force xml.etree to output all of the defined namespaces when you output a document?

Liam

来源:https://stackoverflow.com/questions/24557151/forcing-xml-etree-to-output-unused-namespaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!