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

标签 python xml lxml

使用 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?我只想替换内部文本,同时保留节点的其余部分。我觉得我在这里缺少一些简单的东西。

最佳答案

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

您正在用纯字符串替换元素。您需要将其替换为新的字符串元素。

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

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

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

但是,这似乎有效:

>>> o.b._setText('newtext')

关于python - 在保留属性的同时使用 lxml.objectify 替换节点文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150838/

相关文章:

python - 从长数据绘制 Pandas 的数据透视表

Python lxml getpath错误

Android Studio 找不到颜色样式资源

python - Tastypie : Usage of the XML aspects requires lxml and defusedxml

python - 只查找属性完全匹配的 HTML 节点

Python:如果多个非假

python - 从 WSGI 读取 session /cookie

python - igraph python 检查顶点是否存在

xml - 使用 JAXB 需要 JSON 字段

android - 使用 Android 在 XML 中绘制多边形