使用python和lxml删除元素

时间:2015-08-21 18:40:34

标签: python lxml

我需要从xml中删除以下内容 -

<entry>
    <id>1234</id>
    <title>hello</title>
    <source>com.server.webclient.xxx</source>
    <xxx:component>
        <xxx:id>2134</xxx:id>
        <xxx:name>name</xxx.name>
    </xxx:component>
</entry>

我想要做的是删除<entry><id><title><source>

我的代码正在尝试立即删除ID,但不会返回错误,但它不会删除这些值。

with open('c:\\temp\\%s.xml' % args.componentName, 'w') as f:
    xmlObject = etree.fromstring(r.content)
    for elem in xmlObject.xpath( '//id' ) :
        elem.remove(elem)
    f.write(etree.tostring(xmlObject, pretty_print=True))

这就是我希望我的XML看起来像 -

<xxx:component>
    <xxx:id>2134</xxx:id>
    <xxx:name>name</xxx.name>
</xxx:component>

1 个答案:

答案 0 :(得分:1)

更容易实现所需目标的选项是在<xxx:component>组件中找到<entry>元素并将其写入文件。

示例 -

with open('c:\\temp\\%s.xml' % args.componentName, 'w') as f:
    xmlObject = etree.fromstring(r.content)
    reqElem = xmlObject.xpath('//xxx:component',namespaces=ns)   #ns should have the `xxx` prefix and whatever its actual namespace is
    if len(reqElem) == 1:
        f.write(etree.tostring(reqElem[0], pretty_print=True))