2017-09-06 82 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']