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,

È stato utile?

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
scroll top