如何在cElementTree中获取元素的所有文本子元素?

时间:2015-12-12 14:14:34

标签: python xml xml-parsing celementtree

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

XML

是否可以使用{{检索给定元素的所有立即文本子项(可能作为列表,即上例中的text$ 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' >>> ) 1}}模块?

1 个答案:

答案 0 :(得分:3)

使用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']