2013-03-28 2 views
0

xml을 구문 분석하기 위해 python minidom을 사용하고 있지만 xml 미만에서는 작동하지 않습니다. 나는 첫 번째 서버 태그를 선택합니다 및첫 번째 자식 노드의 값을 얻기위한 Python minidom xml 구문 분석

<class> 
<name>MyClass</name> 
<security> 
<name>MyClass</name> 
</security> 
<server> 
<name>Server1</name> 
<ssl> 
<name>Server1</name> 
</ssl> 
<server-info> 
<name>Server1</name> 
</server-info> 
</server> 
<server> 
<name>Server2</name> 
<ssl> 
<name>Server2</name> 
</ssl> 
<server-info> 
<name>Server2</name> 
</server-info> 
</server> 
<server> 
<name>Server3</name> 
<ssl> 
<name>Server3</name> 
</ssl> 
<server-info> 
<name>Server3</name> 
</server-info> 
</server> 
</class> 
+0

당신이 [ElementTree API를 (사용하지 않는 이유 http://docs.python.org/2/library/xml.etree .elementtree.html) 대신에? –

+0

우리 서버는 파이썬 2.4에서 실행되고 있습니다. 우리는 – DevC

+0

에 빌드 된 것을 원합니다. 그게 유효한 이유지만 최대한 빨리 서버를 업그레이드 할 것입니다. 2.4는 오히려 고대다. –

답변

2

당신은 XML DOM documentation와 모래 치아를 참조해야합니다이 경우 "서버 1", 이름 태그의 값을합니다.

다음, 첫 번째 <server> 요소를 얻기 위해 <name> :

from xml.dom import minidom 

document = minidom.parse(inputfilename) 

def findChildNodeByName(parent, name): 
    for node in parent.childNodes: 
        if node.nodeType == node.ELEMENT_NODE and node.localName == name: 
      return node 
    return None 

def getText(nodelist): 
    rc = [] 
    for node in nodelist: 
     if node.nodeType == node.TEXT_NODE: 
      rc.append(node.data) 
    return ''.join(rc) 

# Get the first of all `<server>` nodes 
server = document.getElementsByTagName('server')[0] 

# Get the first child node that is a `<name>` element 
name = findChildNodeByName(server, 'name') 
if name is not None: 
    print getText(name.childNodes) 
+0

새로 고침마다 향상됩니다. – DevC

+0

@DevC : 나는 미니 홈을 피하는 경향이 있습니다. 가능하다면 내 DOM 기술은 녹슬었고 나는 몇 가지 트릭을 계속 회상합니다. 나는 표준을 본격적으로 다뤄야했기 때문에 [한동안] (http://lists.w3.org/Archives/Public/www-dom/2001JanMar/author.html#msg232)되었습니다. –

+1

다음 부분에 뭔가 들리거나 들여 쓰기가 있습니다. 다음은 파이썬에 없습니다. 2.4 – DevC