2011-02-27 84 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