2017-09-06 112 views
0

Python初學者在這裏。 我想解析一個XML文件的結構,使用minidom。 XML結構是這樣的:Python minidom從XML中提取文本

... 
    <Node Precode="1"> 
     <Text Id="9">sometext 1</Text> 
    </Node> 
... 

我想所有的節點元素添加到列表,使用遞歸功能(我自己設計的,在計算器發現適合我的需求不是)。目前的狀況是這樣的:

from xml.dom import minidom 
list_to_write=[] 
def parse_node(root): 
    if root.childNodes: 
     for node in root.childNodes: 
      if node.nodeType == node.ELEMENT_NODE: 
       new_node = [node.tagName,node.parentNode.tagName,node.getAttribute('Precode'),node.attributes.items()] 

       list_to_write.append(new_node) 

       parse_node(node) 
    return list_to_write 

我怎樣才能提取「SomeText」則會文本,並將其添加爲list_to_write列表中的元素?

+0

提取物「sometext」做什麼?成爲一個列表? – aircraft

+0

作爲list_to_write中的一個元素 –

回答

1

我假設你有一個nodes.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <Node > 
     <Text Id="9">sometext 1</Text> 
    </Node> 
    <Node > 
     <Text Id="9">sometext 2</Text> 
    </Node> 
    <Node > 
     <Text Id="9">sometext 3</Text> 
    </Node> 
    <Node > 
     <Text Id="9">sometext 4</Text> 
    </Node> 
    <Node > 
     <Text Id="9">sometext 5</Text> 
    </Node> 
    <Node> 
     <Text Id="9">sometext 6</Text> 
    </Node> 
    <Node > 
     <Text Id="9">sometext 7</Text> 
    </Node> 
</root> 

而且你可以採取波紋管代碼來獲取文本:

from xml.dom import minidom 

list_to_write=[] 
def parse_node(): 
    doc = minidom.parse("nodes.xml") 
    root = doc.documentElement 

    nodes = root.getElementsByTagName("Node") 
    print doc 
    for node in nodes: 
     list_to_write.append(node.getElementsByTagName("Text")[0].childNodes[0].nodeValue) 

parse_node() 

print (list_to_write) 

結果是:

[u'sometext 1', u'sometext 2', u'sometext 3', u'sometext 4', u'sometext 5', u'sometext 6', u'sometext 7']