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>"
我该怎么做?请帮忙。
答
最后使用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)
你不能 - 因为你的代码所暗示的,''文本是一个单独的节点。你将不得不决定哪些节点应该算作“在线”并分别处理它们。 –
jonrsharpe
2014-10-16 11:48:30
你与迷你图书馆的关系如何? DOM API非常繁琐且冗长;你可能想使用ElementTree API(也是Python stdlib的一部分);它会使这项任务*远为简单*。 – 2014-10-16 11:54:34
非常感谢。我懂了。我会试一试ElementTree API。为了加快我的理解,如何使用ElementTree API进行操作? – suzee 2014-10-16 12:35:09