【问题标题】:Using Python ElementTree to Extract Text in XML Tag使用 Python ElementTree 提取 XML 标签中的文本
【发布时间】:2012-06-16 16:02:02
【问题描述】:

我有一个包含数万个 XML 文件(小型文件)的语料库,我正在尝试使用 Python 并提取其中一个 XML 标记中包含的文本,例如,body 标记之间的所有内容,例如:

<body> sample text here with <bold> nested </bold> tags in this paragraph </body>

然后编写一个包含此字符串的文本文档,然后在 XML 文件列表中向下移动。

我正在使用 effbot 的 ELementTree,但找不到正确的命令/语法来执行此操作。我找到了一个使用 miniDOM 的 dom.getElementsByTagName 的网站,但我不确定 ElementTree 的相应方法是什么。任何想法将不胜感激。

【问题讨论】:

  • 我会先阅读一些教程; Dive into Python 3 XML chapter 将是一个好的开始。
  • 在您的示例中,您是否还想获取标签&lt;bold&gt; 或仅获取其中的文本?
  • body标签之外还有其他内容吗?
  • 这个答案也可能对stackoverflow.com/a/4624146/1290420有帮助
  • body 标签之外还有更多内容,但我认为对于所有 XML 文件,body 标签始终是根标签的子标签。我只想获取正文标签中的文本,而不是嵌套标签。感谢您的链接。我会试试的。

标签: python xml


【解决方案1】:

一个更好的答案,展示了如何实际使用 XML 解析来做到这一点:

import xml.etree.ElementTree as ET
stringofxml = "<body> sample text here with <bold> nested </bold> tags in this paragraph </body>"

def extractTextFromElement(elementName, stringofxml):
    tree = ET.fromstring(stringofxml)
    for child in tree:
        if child.tag == elementName:
            return child.text.strip()

print extractTextFromElement('bold', stringofxml)

【讨论】:

    【解决方案2】:

    我只会使用 re:

    import re
    body_txt = re.match('<body>(.*)</body>',body_txt).groups()[0]
    

    然后删除内部标签:

    body_txt = re.sub('<.*?>','',body_txt)
    

    你不应该在不需要的时候使用正则表达式,这是真的……但在需要的时候使用它们并没有错。

    【讨论】:

    • @Sruffy,你的代码对我有用。谢谢
    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 2021-11-24
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    相关资源
    最近更新 更多