9

作为一个整体,我对 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。

这可行吗?

问候,

4

2 回答 2

5

关于lxml,

doc.replace(block, hilited)

block是 lxml 的 Element 对象,hilited是字符串,你不能替换它。

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

block.text=hilited 

或者

body=body.replace(block.text,hilited)
于 2009-11-28T16:19:22.930 回答
0

如果您是 python HTML 解析器的新手,您可以尝试BeautifulSoup,一个 html/xml 解析器,它可以让您轻松地修改解析树

于 2009-11-28T15:35:05.683 回答