使用Python ElementTree从XML标签中提取文本

3

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

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

接着编写一个包含此字符串的文本文档,并继续处理XML文件列表。

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


2
我建议先阅读一些教程,然后可以从Dive into Python 3 XML章节开始学习。 - Martijn Pieters
在你的例子中,你是否也想获取标签 <bold> 或者只是其中的文本? - Facundo Casco
还有body标签之外的任何内容吗? - poke
这个答案也许会有所帮助 https://dev59.com/im445IYBdhLWcg3w7unD#4624146 - daedalus
正文标签之外还有更多内容,但我认为对于所有的XML文件,正文标签始终是根标签的子标签。我只想获取正文标签中的文本,而不包括任何嵌套标签。感谢提供的链接,我会尝试使用它们。 - Levar
2个回答

2
更好的答案是展示如何使用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)

1

我会只使用re:

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

然后删除内部标签:

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

当不需要时,您不应该使用正则表达式,这是真的...但是当需要时使用它们也没有问题。


@Sruffy,你的代码对我有用。谢谢。 - tursunWali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接