4

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

別の要素に分割したり、etreeを使用したりせずに、objectify内でこれを行う方法はありますか?ノードの残りの部分をそのままにして、内部テキストを置き換えたいだけです。ここで簡単なものが欠けているような気がします。

4

1 に答える 1

9
>>> type(o.b)
<type 'lxml.objectify.StringElement'>

要素をプレーンな文字列に置き換えています。新しい文字列要素に置き換える必要があります。

>>> o.b = objectify.E.b('newtext', atr='someatr')

何らかの理由であなたはただすることができません:

>>> o.b.text = 'newtext'

ただし、これは機能しているようです。

>>> o.b._setText('newtext')
于 2010-01-27T23:55:10.297 に答える