Sostituzione di elementi con lxml.html
Domanda
Sono abbastanza nuovo per i parser lxml e HTML nel loro insieme. Mi chiedevo se c'è un modo per sostituire un elemento all'interno di un albero con un altro elemento ...
Ad esempio 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 in tal senso, ma questo si traduce in un "TypeError" perché "quotato" " non è un lxml.etree._Element.
È possibile?
Saluti,
Soluzione
Per quanto riguarda lxml,
In doc.replace (block, hilited)
blocco è l'oggetto Element di lxml, hilited è una stringa, non è possibile sostituirlo.
Esistono 2 modi per farlo
block.text=hilited
o
body=body.replace(block.text,hilited)
Altri suggerimenti
Se non conosci i parser HTML Python, potresti provare BeautifulSoup , un parser html / xml, che consente di modificare l'analisi albero facilmente .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow