首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保留属性的同时使用lxml.objectify替换节点文本

在保留属性的同时使用lxml.objectify替换节点文本
EN

Stack Overflow用户
提问于 2010-01-28 06:37:22
回答 1查看 3.4K关注 0票数 4

像这样使用lxml.objectify

代码语言:javascript
复制
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?我只想替换内部文本,而不考虑节点的其余部分。我觉得我遗漏了一些简单的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-28 07:55:10

代码语言:javascript
复制
>>> type(o.b)
<type 'lxml.objectify.StringElement'>

您正在用普通字符串替换元素。您需要用一个新的string元素替换它。

代码语言:javascript
复制
>>> o.b = objectify.E.b('newtext', atr='someatr')

出于某些原因,你不能这样做:

代码语言:javascript
复制
>>> o.b.text = 'newtext'

然而,这似乎是可行的:

代码语言:javascript
复制
>>> o.b._setText('newtext')
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2150838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档