【问题标题】:python lxml Add a subelement keeping all the parent treepython lxml 添加一个保留所有父树的子元素
【发布时间】:2019-01-28 10:26:25
【问题描述】:

我有这样的事情:

<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>

我想添加一个标签来保持这个结果:

<source><en>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></en></source>

但是,append、insert 或 subElement 都不会保留父元素的结构。

from lxml import etree
xml = et.fromstring('<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>')
root = xml.getroot()
element = et.Element('en')
root.insert(0, element)
print(et.tostring(root))

但是它会插入一个空标签。我不是在猜测如何保持父级的整个结构是这样的:

<source><en />Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>

【问题讨论】:

    标签: python python-3.x lxml


    【解决方案1】:

    您可以重命名原始根元素,然后将其附加到新的根元素。

    from lxml import etree
    
    old_root = etree.fromstring('<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>')
    
    old_root.tag = "en"
    new_root = etree.Element("source")
    new_root.append(old_root)
    
    print(etree.tostring(new_root))
    

    结果:

    <source><en>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></en></source>
    

    【讨论】:

      【解决方案2】:

      这是我的解决方案。希望这会有所帮助。

      干杯!

      【讨论】:

        猜你喜欢
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 2011-11-20
        • 2023-03-18
        • 2014-02-15
        • 2021-11-02
        相关资源
        最近更新 更多