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