4

プロパティを使用して、ツリーcElementTreeのテキストの子を取得するためにPythonでモジュールを使用しています。しかし、直接のテキストの子に対してのみ機能するようです (以下を参照)。XMLtext

$ 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

4

1 に答える 1

9

使用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']
于 2015-12-12T14:22:20.820 に答える