Reputation: 669
I'm fairly new to lxml and HTML Parsers as a whole. I was wondering if there is a way to replace an element within a tree with another element...
For example I have:
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)
I want to do something along those lines, but this results in a "TypeError" because "hilited" isn't an lxml.etree._Element.
Is this feasible?
Regards,
Upvotes: 10
Views: 9047
Reputation: 188034
If you're new to python HTML parsers, you might try out BeautifulSoup, a html/xml parser, which lets you modify the parse tree easily.
Upvotes: 1
Reputation: 123841
Regarding lxml,
In doc.replace(block, hilited)
block is the lxml's Element object, hilited is string, you cannot replace that.
There is 2 ways to do that
block.text=hilited
or
body=body.replace(block.text,hilited)
Upvotes: 6