python - 如何获取 cElementTree 中元素的所有文本子项?

标签 python xml xml-parsing celementtree

我正在使用 cElementTree Python 中的模块来获取 XML 的文本子项树,使用 text属性(property)。但它似乎只适用于直接文本子项(见下文)。

$ python
...
>>> import xml.etree.cElementTree as ET
>>> root = ET.XML('<root><elm key="value">Some text</elm>More text</root>')
>>> root.text
>>> root = ET.XML('<root>Text 1<elm key="value">Text</elm>Text 2<elm2 />Text 3</root>')
>>> root.text
'Text 1'
>>>

是否可以使用 ['More text'] 检索给定元素的所有直接文本子元素(可能作为列表,即 ['Text 1', 'Text 2', 'Text 3']cElementTree 在上面的示例中)模块?

最佳答案

使用 xml.etree.ElementTree.Element.itertext :

>>> import xml.etree.cElementTree as ET
>>> root = ET.XML('<root><elm key="value">Some text</elm>More text</root>')
>>> list(root.itertext())
['Some text', 'More text']
>>> root = ET.XML('<root>Text 1<elm key="value">Text</elm>Text 2<elm2 />Text 3</root>')
>>> list(root.itertext())
['Text 1', 'Text', 'Text 2', 'Text 3']

更新

要获得即时文本子项,您还需要访问 tail子节点:
>>> root = ET.XML('<root><elm key="value">Some text</elm>More text</root>')
>>> ([root.text] if root.text else []) + [child.tail for child in root]
['More text']
>>> root = ET.XML('<root>Text 1<elm key="value">Text</elm>Text 2<elm2 />Text 3</root>')
>>> ([root.text] if root.text else []) + [child.tail for child in root]
['Text 1', 'Text 2', 'Text 3']

关于python - 如何获取 cElementTree 中元素的所有文本子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240818/

相关文章:

python:导入另一个与本地模块名称相同的项目模块

iphone - 将具有大量子节点的 XML 解析为 UITableView

xml - 返回多个节点时 FLWOR 表达式中出现错误 "undefined variable at noteLine"

python - 使用 ElementTree 修改 XML

python - 是否有可能使 Python 函数的行为像实例一样?

javascript - 如何在razorpay中创建订单,以及如何在Django中将order_id传递给模板

xml - Biztalk 映射 : Grouping different nodes into a list

xml-parsing - "Error attempting to parse XML file"使用 XInclude 解析时

haskell - 如何使用 xml-conduit 游标接口(interface)从大型 XML 文件(大约 30G)中提取信息

python - 有 python3 的 web.py 吗?