2009-11-28 64 views
7

我對lxml和HTML Parsers整體來說還是比較新的。 我想知道如果有一種方法可以替換另一個元素樹中的元素...用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) 

我想要做類似的規定,但這個結果在「TypeError」中,因爲「hilited」不是lxml.etree._Element。

這可行嗎?

問候,

+0

我一直在摸索,我發現BeautifulSoup必須通過replaceWith這個確切的功能,有沒有類似的東西-this-在lxml中? (如果不是這樣還好,我仍然感興趣) 再次感謝! – tsoporan

回答

4

關於LXML,

doc.replace(block, hilited)

是LXML的Element對象,hilited是字符串,則不能更換。

有2種方式來做到這一點

block.text=hilited 

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

啊我明白了!這就說得通了。謝謝! – tsoporan

0

如果你是新的Python HTML解析器,你可以嘗試BeautifulSoup,一個HTML/XML解析器,它可以讓你modify the parse tree easily

+0

我剛剛看過BeautifulSoup,看起來它可能更適合我的使用lxml.html。感謝您的建議! – tsoporan