2009-11-28 14 views
7

私は、lxmlとHTMLパーサ全体をかなり新しくしています。 別の要素でツリー内の要素を交換する方法がある場合、私は私が持っている...例えば要素をlxml.htmlに置き換える

を思っていた:

body = """<code> def function(arg): print arg </code> Blah blah blah <code> int main() { return 0; } </code> """ 

doc = lxml.html.fromstring(body) 
codeblocks = doc.cssselect('code') 

for block in codeblocks: 
    lexer = guess_lexer(block.text_content()) 
    hilited = highlight(block.text_content(), lexer, HtmlFormatter()) 
    doc.replace(block, hilited) 

私はこれらの線に沿って何かをしたいが、これは結果"hilited"はlxml.etree._Elementではないため、 "TypeError"で指定します。

これは実現可能ですか?

よろしく、

+0

私の周りに検索してきたと私はBeautifulSoupはreplaceWithを経由して、この正確な機能を持って気づいた、-this-に似たものがあることを行うための2つの方法があります1xmlで? (しかし、それが問題ないなら、私はまだintrestedです) もう一度ありがとう! – tsoporan

答えて

4

ブロック

doc.replace(block, hilited)ではlxmlののElementオブジェクトである、が文字列でハイライト化、あなたはそれを置き換えることはできません。

block.text=hilited 

または

body=body.replace(block.text,hilited) 
+0

ああ、私は見る!それは理にかなっている。ありがとう! – tsoporan

0

あなたはPythonのHTMLパーサに新しいしている場合、あなたは、あなたのmodify the parse tree easilyをすることができますHTML/XMLパーサを、BeautifulSoupを試してみるかもしれません。 lxmlのについて

+0

私はBeautifulSoupを見てきました。自分の用途に合わせてlxml.htmlに適しているようです。提案していただきありがとうございます! – tsoporan

関連する問題