Frage

ich ziemlich neu bin lxml und HTML-Parser als Ganze. Ich frage mich, ob es einen Weg gibt, ein Element in einem Baum mit einem anderen Element ...

ersetzen

Zum Beispiel habe ich:

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)

Ich möchte etwas in diese Richtung tun, aber dies führt zu einer „Typeerror“, weil „gehilighted“ kein lxml.etree._Element ist.

Ist das machbar?

Grüße,

War es hilfreich?

Lösung

In Bezug auf lxml,

In doc.replace(block, hilited)

Block ist das Element des Objekts lxml, gehilighted ist string, man kann das nicht ersetzen.

Es gibt zwei Möglichkeiten, das

zu tun
block.text=hilited 

oder

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

Andere Tipps

Wenn Sie Python HTML-Parser neu sind, könnten Sie versuchen, BeautifulSoup , ein hTML / xML-Parser, die Sie ändern den Parsing können Baum leicht .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top