我正在使用python第三个和ElementTree API。我有一些形式的xml:
<root>
<item>Over the <ref id="river" /> and through the <ref id="woods" />.</item>
<item>To Grandmother's <ref id="house" /> we go.</item>
</root>
我希望能够按顺序遍历给定项目的文本和子节点。因此,对于第一个项目,我想逐行打印的列表将是:
Over the
<Element 'ref' at 0x######>
and through the
<Element 'ref' at 0x######>
.
但我无法弄清楚如何使用ElementTree做到这一点。我可以通过itertext()
按顺序获取文本和子元素按顺序排列,但不是按顺序交错排列。我希望我可以使用像./@text|./ref
这样的XPath表达式,但是ElementTree的XPath子集似乎不支持属性选择。如果我甚至可以获得每个项目节点的原始xml内容,我可以在必要时自己解析它。
答案 0 :(得分:4)
试试这个:
from xml.etree import ElementTree as ET
xml = """<root>
<item>Over the <ref id="river" /> and through the <ref id="woods" />.</item>
<item>To Grandmother's <ref id="house" /> we go.</item>
</root>"""
root = ET.fromstring(xml)
for item in root:
if item.text:
print(item.text)
for ref in item:
print(ref)
if ref.tail:
print(ref.tail)
ElementTree
代表&#34;混合内容&#34;基于.text
和.tail
属性。元素的.text
表示直到第一个子元素的元素的文本。那个孩子的.tail
然后包含其父母的文本。请参阅API doc。