soap - How to search for XML elements in python? -
Сode shown below works perfectly, problem need manually set name-spaces d:
. possible somehow search elements ignoring name-spaces dom.getelementsbytagname('scopes')
?
def parsesoapbody(soap_data): dom = parsestring(soap_data) return { 'scopes': dom.getelementsbytagname('d:scopes')[0].firstchild.nodevalue, 'address': dom.getelementsbytagname('d:xaddrs')[0].firstchild.nodevalue, }
since code uses parsestring , getelementsbytagname
, i'm assuming using minidom. in case, try:
dom.getelementsbytagnamens('*', 'scopes')
it doesn't in the docs, if in source code xml/dom/minidom.py
, you'll see getelementsbytagnamens
calls _get_elements_by_tagname_ns_helper
defined this:
def _get_elements_by_tagname_ns_helper(parent, nsuri, localname, rc): node in parent.childnodes: if node.nodetype == node.element_node: if ((localname == "*" or node.localname == localname) , (nsuri == "*" or node.namespaceuri == nsuri)): rc.append(node) _get_elements_by_tagname_ns_helper(node, nsuri, localname, rc) return rc
notice when nsuri
equals *
, localname
needs match.
for example,
import xml.dom.minidom minidom content = '''<root xmlns:f="foo"><f:test/><f:test/></root>''' dom = minidom.parsestring(content) n in dom.getelementsbytagnamens('*', 'test'): print(n.toxml()) # <f:test/> # <f:test/>
Comments
Post a Comment