Замена элементов с помощью lxml.html - PullRequest
6 голосов
/ 28 ноября 2009

Я довольно новичок в парсерах 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._Element.

Это возможно?

С уважением,

Ответы [ 2 ]

4 голосов
/ 28 ноября 2009

Относительно lxml,

В doc.replace(block, hilited)

block является объектом Element lxml, hilited является строкой, вы не можете заменить это.

Есть 2 способа сделать это

block.text=hilited 

или

body=body.replace(block.text,hilited)
0 голосов
/ 28 ноября 2009

Если вы новичок в синтаксических анализаторах Python HTML, вы можете попробовать BeautifulSoup , анализатор html / xml, который позволяет легко изменять дерево разбора .

...