Python元素树 - 从元素中提取文本,剥离标签

Python element tree - extract text from element, stripping tags(Python元素树 - 从元素中提取文本,剥离标签)
本文介绍了Python元素树 - 从元素中提取文本,剥离标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

使用 Python 中的 ElementTree,如何从节点中提取所有文本,剥离该元素中的所有标签并仅保留文本?

With ElementTree in Python, how can I extract all the text from a node, stripping any tags in that element and keeping only the text?

例如,假设我有以下内容:

For example, say I have the following:

<tag>
  Some <a>example</a> text
</tag>

我想返回一些示例文本.我该怎么做呢?到目前为止,我所采取的方法都产生了相当灾难性的后果.

I want to return Some example text. How do I go about doing this? So far, the approaches I've taken have had fairly disastrous outcomes.

推荐答案

如果你在 Python 3.2+ 下运行,你可以使用 itertext.

If you are running under Python 3.2+, you can use itertext.

itertext 创建一个文本迭代器,它按文档顺序循环此元素和所有子元素,并返回所有内部文本:

itertext creates a text iterator which loops over this element and all subelements, in document order, and returns all inner text:

import xml.etree.ElementTree as ET
xml = '<tag>Some <a>example</a> text</tag>'
tree = ET.fromstring(xml)
print(''.join(tree.itertext()))

# -> 'Some example text'

如果你在较低版本的 Python 中运行,你可以重用 itertext() 的实现,通过将其附加到 Element 类,之后您可以像上面一样调用它:

If you are running in a lower version of Python, you can reuse the implementation of itertext() by attaching it to the Element class, after which you can call it exactly like above:

# original implementation of .itertext() for Python 2.7
def itertext(self):
    tag = self.tag
    if not isinstance(tag, basestring) and tag is not None:
        return
    if self.text:
        yield self.text
    for e in self:
        for s in e.itertext():
            yield s
        if e.tail:
            yield e.tail

# if necessary, monkey-patch the Element class
if 'itertext' not in ET.Element.__dict__:
    ET.Element.itertext = itertext

xml = '<tag>Some <a>example</a> text</tag>'
tree = ET.fromstring(xml)
print(''.join(tree.itertext()))

# -> 'Some example text'

这篇关于Python元素树 - 从元素中提取文本,剥离标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

python arbitrarily incrementing an iterator inside a loop(python在循环内任意递增迭代器)
Joining a set of ordered-integer yielding Python iterators(加入一组产生 Python 迭代器的有序整数)
Iterating over dictionary items(), values(), keys() in Python 3(在 Python 3 中迭代字典 items()、values()、keys())
What is the Perl version of a Python iterator?(Python 迭代器的 Perl 版本是什么?)
How to create a generator/iterator with the Python C API?(如何使用 Python C API 创建生成器/迭代器?)
Python generator behaviour(Python 生成器行为)