5

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)

wheredataは、すべての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 が正しいタグを見つけられるように、コロンをエスケープする方法はありますか? :この文脈で何か特別な意味がありますか? それとも私は何か間違ったことをしていますか?どんな助けでも大歓迎です。

4

1 に答える 1

9

:、XML 名前空間セパレータです。lxml でコロンをエスケープするには、item.find("{http://example.org/}status").text.

于 2011-02-27T17:47:33.367 に答える