【问题标题】:replacing node text using lxml.objectify while preserving attributes在保留属性的同时使用 lxml.objectify 替换节点文本
【发布时间】:2010-01-27 22:37:21
【问题描述】:

像这样使用lxml.objectify

from lxml import objectify

o = objectify.fromstring("<a><b atr='someatr'>oldtext</b></a>")

o.b = 'newtext'

导致&lt;a&gt;&lt;b&gt;newtext&lt;/b&gt;&lt;/a&gt;,丢失节点属性。它似乎是直接用新创建的元素替换元素,而不是简单地替换元素的文本。

如果我尝试使用o.b.text = 'newtext',它会告诉我 attribute 'text' of 'StringElement' objects is not writable.

有没有办法在 objectify 中做到这一点,而不必将其拆分为不同的元素并涉及 etree?我只是想替换内部文本,同时不理会节点的其余部分。我觉得我在这里遗漏了一些简单的东西。

【问题讨论】:

    标签: python xml lxml


    【解决方案1】:
    >>> type(o.b)
    <type 'lxml.objectify.StringElement'>
    

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

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

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

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

    但是,这似乎可行:

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

    【讨论】:

    • _setText() 正是我想要的。谢谢!
    猜你喜欢
    • 2012-07-01
    • 2020-05-15
    • 2015-03-04
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2016-11-18
    相关资源
    最近更新 更多