用lxml在Python中解析ODF

1 投票
1 回答
1176 浏览
提问于 2025-04-17 02:19

我正在尝试解析一个ODF文件中的content.xml。我已经把文件读入了一个字符串,并且得到了一个用lxml.etree创建的树状对象:

tree = etree.XML(string)

但是现在我需要找到所有的子元素,这些子元素要么是text:a,要么是text:h。我在之前的问题中被告知可以使用XPath。我试过了,但每次都卡住。甚至连一个这样的元素都找不到。

如果我尝试:

elem = tree.xpath('//text:p')
,我得到的结果是:
XPathEvalError: Undefined namespace prefix

那么我该如何获取一个包含这两种子元素的列表,并且保持它们的顺序,以便我可以逐个处理它们呢?

1 个回答

1

这是因为 text 是一个命名空间的缩写,它是在 ODF 规范 中定义的。你可以试试

tree.xpath('//text:a | //text:h',
           namespaces={'text': 'urn:oasis:names:tc:opendocument:xmlns:text:1.0'})

| 是集合并操作符。你也可以查看 LXML 文档 来了解更多。

撰写回答