Pergunta

Eu sou bastante novo para lxml e analisadores HTML como um todo. Eu queria saber se existe uma maneira de substituir um elemento dentro de uma árvore com um outro elemento ...

Por exemplo eu tenho:

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)

Eu quero fazer algo nesse sentido, mas isso resulta em uma "TypeError" porque "hilited" não é uma lxml.etree._Element.

É este viável?

Saudações,

Foi útil?

Solução

Em relação lxml,

Em doc.replace(block, hilited)

bloco é a de lxml elemento de objeto, hilited é string, você não pode substituir isso.

Há 2 maneiras de fazer isso

block.text=hilited 

ou

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

Outras dicas

Se você é novo para analisadores de python HTML, você pode experimentar BeautifulSoup , um html / xml parser, que permite modificar o parse árvore facilmente .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top