像这样使用lxml.objectify:
from lxml import objectify
o = objectify.fromstring("<a><b atr='someatr'>oldtext</b></a>")
o.b = 'newtext'将导致<a><b>newtext</b></a>,丢失节点属性。它似乎是直接用新创建的元素替换元素,而不是简单地替换元素的文本。
如果我尝试使用o.b.text = 'newtext',它会告诉我attribute 'text' of 'StringElement' objects is not writable。
有没有一种方法可以在objectify中做到这一点,而不必将其拆分成不同的元素并涉及etree?我只想替换内部文本,而不考虑节点的其余部分。我觉得我遗漏了一些简单的东西。
发布于 2010-01-28 07:55:10
>>> type(o.b)
<type 'lxml.objectify.StringElement'>您正在用普通字符串替换元素。您需要用一个新的string元素替换它。
>>> o.b = objectify.E.b('newtext', atr='someatr')出于某些原因,你不能这样做:
>>> o.b.text = 'newtext'然而,这似乎是可行的:
>>> o.b._setText('newtext')https://stackoverflow.com/questions/2150838
复制相似问题