2013-03-28 174 views
0

我正在使用python minidom解析xml,但無法使其在xml下工作。我要選擇的第一個服務器代碼,並要名標籤的值,在這種情況下,「服務器1」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)而不是? – 2013-03-28 10:48:37

+0

我們的服務器運行在python 2.4上,我們想要的東西是內置於 – DevC 2013-03-28 10:51:02

+0

這是一個有效的原因,但我會着眼於升級服務器儘快; 2.4比較古老。 – 2013-03-28 10:52:55

回答

2

你必須引用XML DOM documentation和咬緊牙關。

爲了得到第<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 2013-03-28 11:15:13

+0

@DevC:我傾向於避免minidom如果可能的話,我的DOM技能是生鏽的,我不斷回想一些技巧。由於我不得不認真處理這個標準,它[已經有一段時間了](http://lists.w3.org/Archives/Public/www-dom/2001JanMar/author.html#msg232)。 – 2013-03-28 11:16:37

+1

接下來的一部分是錯誤的,或者是indentation或者其他東西.. gotcha接下來不在Python 2.4 – DevC 2013-03-28 11:19:00