2009-11-28 14 views
7

Sono abbastanza nuovo per lxml e HTML Parser nel suo complesso. Mi chiedevo se esiste un modo per sostituire un elemento all'interno di un albero con un altro elemento ...Sostituzione di elementi con lxml.html

Per esempio io ho:

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) 

voglio fare qualcosa del genere, ma questo risultato in un "TypeError" perché "hilited" non è un lxml.etree._Element.

È fattibile?

saluti,

+0

ho cercato in giro e ho notato BeautifulSoup ha questa funzionalità esatto tramite ReplaceWith, c'è qualcosa di simile a -this- in lxml? (Se non va bene comunque, sono ancora interessato) Grazie ancora! – tsoporan

risposta

4

Per quanto riguarda lxml,

In doc.replace(block, hilited)

blocco è oggetto Elemento del lxml, hilited è stringa, non è possibile sostituire questo.

Ci sono 2 modi per farlo

block.text=hilited 

o

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

Ah, vedo! Ciò ha senso. Grazie! – tsoporan

0

Se sei nuovo a Python parser HTML, si potrebbe provare BeautifulSoup, un HTML/XML parser, che consente di modify the parse tree easily.

+0

Ho appena guardato BeautifulSoup, sembra che potrebbe essere una misura migliore di lxml.html per i miei usi. Grazie per il suggerimento! – tsoporan

Problemi correlati