2011-02-27 15 views
5

Bir Wordpress dışa aktarma belge ayrıştırmak için lxml.etree kullanmaya çalışıyorum (XML, biraz RSS gibi). Ben yayınlanan mesajların ilgileniyorum sadece, bu yüzden yayınlanan mesajların döngü aşağıdaki kullanıyorum.Etiketler: ile lxml içinde

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 tüm item etiketleri bulunan etikettir item etiketleri içeren yayınların, sayfalar ve taslaklar. Sorunum, lxml'nin adında : olan etiketleri bulamamasıdır (ör. wp:post_type). Ben KeyError : ':' geçersiz olma etiketi adına kolon atıfta varsayalım

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: ':' 

: Ben item.find("wp:post_type") çalıştığınızda bu hatayı alıyorum. Lxml'nin doğru etiketi bulması için iki noktadan kurtulabilmemin bir yolu var mı? Bu bağlamda :'un bazı özel anlamları var mı? Yoksa yanlış bir şey mi yapıyorum? Herhangi bir yardım takdir edilecektir.

cevap

9

: XML ad alanı ayırıcısıdır. Lxml'deki virgülden kurtulmak için, item.find("{http://example.org/}status").text'daki gibi küme parantez içindeki ad alanı URL'si ile değiştirmeniz gerekir.

+0

Teşekkürler, bu benim sorunumu çözdü. –

İlgili konular