用lxml.html替换元素

时间:2009-11-28 15:22:59

标签: python lxml

作为一个整体,我对lxml和HTML Parsers相当新。 我想知道是否有办法用另一个元素替换树中的元素......

例如我有:

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 个答案:

答案 0 :(得分:4)

关于lxml,

doc.replace(block, hilited)

阻止是lxml的Element对象, hilited 是字符串,你无法替换它。

有两种方法可以做到这一点

block.text=hilited 

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

答案 1 :(得分:0)

如果你是python HTML解析器的新手,你可以尝试BeautifulSoup,一个html / xml解析器,它可以让你modify the parse tree easily