Разбор ODF в Python с помощью lxml - PullRequest
1 голос
/ 15 сентября 2011

Я пытаюсь разобрать content.xml внутри ODF-файла. Я прочитал файл в строку, и у меня есть объект дерева с lxml.etree:

tree = etree.XML(string)

Но теперь мне нужно найти каждый подэлемент, который является текстом: ИЛИ текст: h. В предыдущем вопросе мне сказали, что я могу использовать XPath. Я пытался, но застрял каждый раз. Не могу даже найти один из этих элементов.

Если я попробую:

elem = tree.xpath('//text:p')
Я просто получаю
XPathEvalError: Undefined namespace prefix

Итак, как мне получить список с ОБАЯМИ подэлементов в правильном порядке, чтобы я мог их перебирать?

1 Ответ

1 голос
/ 15 сентября 2011

Это потому, что text - это сокращение пространства имен, определенное в схеме ODF .Попробуйте

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

| - оператор объединения наборов.Смотрите также Документы LXML .

...