2014-04-14 1 views
0

아래 표시된 코드는 완벽하게 작동하지만, 문제는 내가 수동으로 이름 공간을 d:과 같이 설정해야한다는 것입니다. 어떻게 든이 이름을 무시하는 요소를 검색 할 수 있습니까? 예 : dom.getElementsByTagName('Scopes')?Python에서 XML 요소를 검색하는 방법은 무엇입니까?

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, 
    } 

답변

1

코드가 parseString을 사용하므로 및 getElementsByTagName, 나는 당신이 minidom을 사용하고 있으리라 믿고있어. 이 경우, 시도 :

dom.getElementsByTagNameNS('*', 'Scopes') 

the docs 그렇게 말을하지 않습니다,하지만 당신은 xml/dom/minidom.py의 소스 코드를 보면, 당신은 다음과 같이 정의된다 getElementsByTagNameNS 통화 _get_elements_by_tagName_ns_helper가 표시됩니다

nsURI* 같을 때 만 localName이 일치해야한다는 는
def _get_elements_by_tagName_ns_helper(parent, nsURI, localName, rc): 
    for node in parent.childNodes: 
     if node.nodeType == Node.ELEMENT_NODE: 
      if ((localName == "*" or node.localName == localName) and 
       (nsURI == "*" or node.namespaceURI == nsURI)): 
       rc.append(node) 
      _get_elements_by_tagName_ns_helper(node, nsURI, localName, rc) 
    return rc 

알 수 있습니다. 예를 들어


,

import xml.dom.minidom as minidom 
content = '''<root xmlns:f="foo"><f:test/><f:test/></root>''' 
dom = minidom.parseString(content) 
for n in dom.getElementsByTagNameNS('*', 'test'): 
    print(n.toxml()) 
    # <f:test/> 
    # <f:test/> 
관련 문제