0

我有这个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”可以是任何文本?

4

1 回答 1

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属性返回元素结束标记之后的文本内容。

于 2012-09-12T10:31:28.370 回答