【问题标题】:Python minidom XML parser - ignore child tagsPython minidom XML 解析器 - 忽略子标签
【发布时间】:2014-10-16 11:46:00
【问题描述】:

我有一个 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>"

我该怎么做?请帮忙。

【问题讨论】:

  • 你不能 - 正如你的代码所暗示的那样,&lt;italic&gt; 文本是一个单独的节点。您必须决定哪些节点应算作“内联”并单独处理。
  • 您与 minidom 库的关系如何? DOM API非常繁琐冗长;您可能想要使用 ElementTree API(也是 Python 标准库的一部分);它会让这项任务简单得多
  • 非常感谢。我懂了。我将尝试使用 ElementTree API。只是为了加快我的理解,如何使用 ElementTree API 做到这一点?

标签: python xml-parsing minidom


【解决方案1】:

终于用到了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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多