Pregunta

Soy bastante nuevo en lxml y HTML Parsers en su conjunto. Me preguntaba si hay una manera de reemplazar un elemento dentro de un árbol con otro elemento ...

Por ejemplo, tengo:

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)

Quiero hacer algo en ese sentido, pero esto da como resultado " TypeError " porque " hilited " no es un lxml.etree._Element.

¿Es esto factible?

Saludos,

¿Fue útil?

Solución

Con respecto a lxml,

En doc.replace (block, hilited)

block es el objeto Element de lxml, hilited es string, no puede reemplazarlo.

Hay 2 formas de hacerlo

block.text=hilited 

o

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

Otros consejos

Si eres nuevo en los analizadores HTML de Python, puedes probar BeautifulSoup , un analizador html / xml, que le permite modificar el análisis árbol fácilmente .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top