Sum*_*mit 3 python xml celementtree xml-parsing
我cElementTree在 Python 中使用模块来获取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'
>>>
Run Code Online (Sandbox Code Playgroud)
是否有可能检索所有直接给定的元素(如可能的列表,即文本儿童['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']
Run Code Online (Sandbox Code Playgroud)
更新
要获得直接文本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']
Run Code Online (Sandbox Code Playgroud)