Теги с: от имени в lxml - PullRequest
       9

Теги с: от имени в lxml

5 голосов
/ 27 февраля 2011

Я пытаюсь использовать lxml.etree для анализа документа экспорта Wordpress (это XML, что-то вроде RSS).Меня интересуют только опубликованные сообщения, поэтому я использую следующее для циклического просмотра опубликованных сообщений:

for item in data.findall("item"):
    if item.find("wp:post_type").text != "post":
        continue
    if item.find("wp:status").text != "publish":
        continue
    write_post(item)

, где data - тег, в котором находятся все теги item.* теги содержат сообщения, страницы и черновики.Моя проблема в том, что lxml не может найти теги с : в названии (например, wp:post_type).Когда я пытаюсь item.find("wp:post_type"), я получаю эту ошибку:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "lxml.etree.pyx", line 1279, in lxml.etree._Element.find (src/lxml/lxml.e
tree.c:38124)
  File "/usr/lib64/python2.7/site-packages/lxml/_elementpath.py", line 210, in f
ind
    it = iterfind(elem, path)
  File "/usr/lib64/python2.7/site-packages/lxml/_elementpath.py", line 200, in i
terfind
    selector = _build_path_iterator(path)
  File "/usr/lib64/python2.7/site-packages/lxml/_elementpath.py", line 184, in _
build_path_iterator
    selector.append(ops[token[0]](_next, token))
KeyError: ':'

Я предполагаю, что KeyError : ':' ссылается на двоеточие в названии тега как недействительное.Есть ли какой-нибудь способ избежать двоеточия, чтобы lxml нашел правильный тег?Имеет ли : какое-то особое значение в этом контексте?Или я что-то не так делаю?Любая помощь будет оценена.

1 Ответ

9 голосов
/ 27 февраля 2011

: является разделителем пространства имен XML. Чтобы избежать двоеточия в lxml, необходимо заменить его URL-адресом пространства имен в фигурных скобках, как в item.find("{http://example.org/}status").text.

...