2011-02-27 68 views
5

我想使用lxml.etree来解析一个Wordpress导出文档(它是XML,有点像RSS)。我只是在发布的文章感兴趣,所以我用下面的循环通过已发布的帖子:标签:在lxml名称

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标签中找到的标签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找到正确的标签吗? :在这方面有什么特别的含义?或者我做错了什么?任何帮助,将不胜感激。

回答

9

:是一个XML命名空间分隔符。要在lxml中转义冒号,您需要用花括号中的名称空间URL替换它,如item.find("{http://example.org/}status").text

+0

谢谢,这解决了我的问题。 – 2011-02-27 19:21:09