2015-03-03 4 views
1

У меня есть файл XML, а в середине этого у меня есть блок, как это:XML разбора с XMLTree или MINIDOM

... 
<node id = "1" > 
    <ngh id = "2" > 100 </ngh> 
    <ngh id = "3"> 300 </ngh> 
</node> 

<node id = "2"> 
    <ngh id = "1" > 400 </ngh> 
    <ngh id = "3"> 500 </ngh> 
</node> 
... 

и пытается получить

1, 2, 100 
1, 3, 300 
2, 1, 400 
2, 3, 500 
... 

Я нашел аналогичный вопрос и сделал следующее

from xml.dom import minidom 
xmldoc = minidom.parse('file.xml') 
nodelist = xmldoc.getElementsByTagName('node') 

for s in nodelist: 
    print s.attributes['id'].value) 

есть ли способ получить значения между тегами (т.е. 100, 300, 400)?

ответ

3

Вам нужен внутренний цикл по ngh элементов:

from xml.dom import minidom 

xmldoc = minidom.parse('file.xml') 
nodes = xmldoc.getElementsByTagName('node') 

for node in nodes: 
    node_id = node.attributes['id'].value 
    for ngh in node.getElementsByTagName('ngh'): 
     ngh_id = ngh.attributes['id'].value 
     ngh_text = ngh.firstChild.nodeValue 

     print node_id, ngh_id, ngh_text 

распечаток:

1 2 100 
1 3 300 
2 1 400 
2 3 500