python ElementTree текст элемента, у которого есть дочерний элемент

Когда я пытаюсь прочитать текст элемента, у которого есть дочерний элемент, он дает None:

См. xml (скажем, test.xml):

<?xml version="1.0"?>
<data>
    <test><ref>MemoryRegion</ref> abcd</test>
</data>

и код Python, который хочет прочитать «abcd»:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
print root.find("test").text

Когда я запускаю этот питон, он дает None, а не abcd.

Как я могу читать abcd в этом состоянии?


person jaeyong    schedule 31.10.2013    source источник
comment
Это очень раздражало. Похоже, что «abcd» — это текстовое значение «test».   -  person jeremyjjbrown    schedule 13.07.2016


Ответы (2)


Используйте атрибут Element.tail. :

>>> import xml.etree.ElementTree as ET
>>> tree = ET.parse('test.xml')
>>> root = tree.getroot()
>>> print root.find(".//ref").tail
 abcd
person falsetru    schedule 31.10.2013

ElementTree имеет несколько иное представление XML, которое больше подходит для вложенных данных. .text — это данные сразу после начального тега. .tail — это данные сразу после закрывающего тега. Итак, вы хотите:

print root.find('test/ref').tail
person Mark Tolonen    schedule 31.10.2013