繁体   English   中英

使用Python LXML删除XML元素值但保留一个占位符

[英]Using Python LXML to removing XML element values but leaving one placeholder

我有一个XML文件,我想清除'value'子元素中的文本,但保留一个空的value元素作为占位符,以便以后添加文本。 我正在使用Python的LXML模块。

这是XML部分的示例:

<spec class="Spec" name="New Test">
    <mainreport>
        <item name="New Item">First Item</item>
    </mainreport>

    <case class="CaseItem" name="Some Name">
        <extraelement>
            <item name="ID">Some Id</item>

        </extraelement>

        <pool class="String" name="Originator">
            <value>A</value>
            <value>B</value>
            <value>C</value>
        </pool>

        <pool class="String" name="Target">
            <value>D</value>
            <value>E</value>
            <value>F</value>
        </pool>

这就是我希望输出的内容:

<spec class="Spec" name="New Test">
    <mainreport>
        <item name="New Item">First Item</item>
    </mainreport>

    <case class="CaseItem" name="Some Name">
        <extraelement>
            <item name="ID">Some Id</item>

        </extraelement>

        <pool class="String" name="Originator">
            <value></value>
        </pool>

        <pool class="String" name="Target">
            <value></value>
        </pool>

我已经编写了以下代码,但仅将“ value”标签添加到最后一个元素:

import lxml.etree as et
import os

xml_match = os.path.join("input.xml")
doc = et.parse(xml_match)

for elem in doc.xpath('//case/pool/value'):
    elem.getparent().remove(elem)

blankval = et.Element("value")
blankval.text = ""

for elem in doc.xpath('//case/pool'):
    elem.insert(1, blankval)

outFile = "output.xml"

doc.write(outFile)

我将删除所有value元素,并在单个循环中添加一个空元素:

for elem in doc.xpath('//case/pool'):
    for value in elem.findall("value"):
        elem.remove(value)

    blankval = et.Element("value")
    blankval.text = ""
    elem.append(blankval)

还有一个方便的.clear()方法 ,但它也可以清除属性。


当前方法不起作用的原因是,您试图重用相同的完全blankval元素,但是相反,您需要在循环中重新创建新元素,然后再执行插入操作:

for elem in doc.xpath('//case/pool'):
    blankval = et.Element("value")
    blankval.text = ""
    elem.insert(1, blankval)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM