這是一種方式:
#!/usr/bin/env python2.6
from lxml.html import fromstring, tostring
from lxml.html import builder as E
fragment = """\
<div id="outer">
<div id="inner">This is div.</div>
</div>"""
div = fromstring(fragment)
print tostring(div)
# <div id="outer">
# <div id="inner">This is div.</div>
# </div>
div.replace(div.get_element_by_id('inner'), E.DIV('Hello ', E.B('world!')))
print tostring(div)
# <div id="outer">
# <div>Hello <b>world!</b></div></div>
參見:http://lxml.de/lxmlhtml.html#creating-html-with-the-e-factory
編輯:所以,我應該早一點,我不是所有熟悉LXML供認不諱。我簡要地看了一下文檔和源代碼,但沒有找到一個乾淨的解決方案。也許,更熟悉的人會停下來,讓我們兩個都挺直。
在此期間,這似乎是工作,但沒有得到很好的測試:再次
import lxml.html
content_tag = lxml.html.fromstring('<div>Goodbye.</div>')
content_tag.text = '' # assumes only text to start
for elem in lxml.html.fragments_fromstring('Hello <b>world!</b>'):
if type(elem) == str: #but, only the first?
content_tag.text += elem
else:
content_tag.append(elem)
print lxml.html.tostring(content_tag)
編輯:這個版本中刪除的文字和兒童
somehtml = 'Hello <b>world!</b>'
# purge element contents
content_tag.text = ''
for child in content_tag.getchildren():
content_tag.remove(child)
fragments = lxml.html.fragments_fromstring(somehtml)
if type(fragments[0]) == str:
content_tag.text = fragments.pop(0)
content_tag.extend(fragments)
_nice_方式,因爲你真的試圖修改DOM結構,將爲'world'添加一個新的子節點。 – katrielalex
我該怎麼做? –