如何在elementtree中找到xmlns中的文本

时间:2012-09-12 05:31:17

标签: python xml xml-namespaces elementtree

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

1 个答案:

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