我有这个xml:
<office:body>
<office:text>
<text:sequence-decls>
<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
<text:sequence-decl text:display-outline-level="0" text:name="Table"/>
<text:sequence-decl text:display-outline-level="0" text:name="Text"/>
<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
</text:sequence-decls>
<text:p text:style-name="Standard">
<office:annotation>...</office:annotation>
foobar
</text:p>
</office:text>
</office:body>
我想找到带有elementtree的文本“foobar”,因为而不是“foobar”可以是任何文本吗?
答案 0 :(得分:1)
假设XML文档看起来像这样(带有声明的命名空间):
<office:document-content xmlns:office="http://openoffice.org/2000/office"
xmlns:text="http://openoffice.org/2000/text">
<office:body>
<office:text>
<text:sequence-decls>
<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
<text:sequence-decl text:display-outline-level="0" text:name="Table"/>
<text:sequence-decl text:display-outline-level="0" text:name="Text"/>
<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
</text:sequence-decls>
<text:p text:style-name="Standard">
<office:annotation>...</office:annotation>
foobar
</text:p>
</office:text>
</office:body>
</office:document-content>
然后您可以使用此程序获取“foobar”字符串:
from xml.etree import ElementTree as ET
root = ET.parse("foobar.xml")
ann = root.find(".//{http://openoffice.org/2000/office}annotation")
print ann.tail.strip()
此处,ElementTree.find()
方法用于查找office:annotation
元素,Element.tail
属性返回元素结束标记后的文本内容。