Python的minidom命名XML解析器 - 忽略子标签

问题描述:

我有一个看起来像一个XML文件:Python的minidom命名XML解析器 - 忽略子标签

<tag1> 
    <tag2> 
     I am too good <italic>to be true</italic> 
    </tag2> 
</tag1> 

现在,当我想以“TAG2”标签中提取数据, 然后假设XML文件读入“XML_data”变量:

XML_data.getElementsByTagName('tag1')[0].getElementsByTagName('tag2')[0].childNodes[0].data 
evaluates to "I am too good" 
and 
XML_data.getElementsByTagName('tag1')[0].getElementsByTagName('tag2')[0].getElementsByTagName('italic')[0].childNodes[0].data 
evaluates to "to be true" 

我想是能够TAG2中提取出完整的块,通过忽略斜体标签。即我希望我的出价是

"I am too good <italic>to be true</italic>" 

我该怎么做?请帮忙。

+0

你不能 - 因为你的代码所暗示的,''文本是一个单独的节点。你将不得不决定哪些节点应该算作“在线”并分别处理它们。 – jonrsharpe 2014-10-16 11:48:30

+0

你与迷你图书馆的关系如何? DOM API非常繁琐且冗长;你可能想使用ElementTree API(也是Python stdlib的一部分);它会使这项任务*远为简单*。 – 2014-10-16 11:54:34

+0

非常感谢。我懂了。我会试一试ElementTree API。为了加快我的理解,如何使用ElementTree API进行操作? – suzee 2014-10-16 12:35:09

最后使用ElementTree的

import xml.etree.ElementTree as ET 
import re 

def extractTextFromElement(elementName, stringofxml): 
    tree = ET.fromstring(stringofxml) 
    for child in tree.getiterator(): 
     if child.tag == elementName: 
      len = ET.tostring(child) 
      return re.sub(r'<.*?>', '', len) 


usage: extractTextFromElement('tag2', XML_data)