Я пытаюсь использовать 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 нашел правильный тег?Имеет ли :
какое-то особое значение в этом контексте?Или я что-то не так делаю?Любая помощь будет оценена.