Замена элементов на lxml.формат html
Я довольно новичок в парсерах lxml и HTML в целом. Мне было интересно, есть ли способ заменить элемент внутри дерева другим элементом...
например у меня есть:
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)
Я хочу сделать что-то в этом роде, но это приводит к "TypeError", потому что "hilited" не является lxml.etree._Элемент.
это возможно?
С уважением,
2 ответов
относительно lxml,
на doc.replace(block, hilited)
блок является объектом элемента lxml,hilited - это строка, вы не можете заменить это.
есть 2 способа сделать это
block.text=hilited
или
body=body.replace(block.text,hilited)
Если вы новичок в синтаксических анализаторах python HTML, вы можете попробовать BeautifulSoup, парсер html / xml, который позволяет вам изменить дерево разбора легко.