【问题标题】:python remove element containing namespacepython删除包含命名空间的元素
【发布时间】:2013-08-20 00:10:23
【问题描述】:

我正在尝试删除包含命名空间的 xml 中的元素。 这是我的代码:

templateXml = """<?xml version="1.0" encoding="UTF-8"?>
<Metadata xmlns="http://www.amazon.com/UnboxMetadata/v1">
<Movie>
        <CountryOfOrigin>US</CountryOfOrigin>
        <TitleInfo>
                <Title locale="en-GB">The Title</Title>
                <Actor>
                        <ActorName locale="en-GB">XXX</ActorName>
                        <Character locale="en-GB">XXX</Character>
                </Actor>
        </TitleInfo>    
</Movie>
</Metadata>"""

from lxml import etree
tree = etree.fromstring(templateXml)

namespaces = {'ns':'http://www.amazon.com/UnboxMetadata/v1'}

for checkActor in tree.xpath('//ns:Actor', namespaces=namespaces):
    etree.strip_elements(tree, 'ns:Actor')

在我的实际 XML 中,我有很多标签,所以我试图搜索包含 XXX 的 Actor 标签并完全删除整个标签及其内容。但它不起作用。

【问题讨论】:

    标签: python xml parsing lxml xml-namespaces


    【解决方案1】:

    使用remove()方法:

    for checkActor in tree.xpath('//ns:Actor', namespaces=namespaces):
        checkActor.getparent().remove(checkActor)
    
    print etree.tostring(tree, pretty_print=True, xml_declaration=True)
    

    打印:

    <?xml version='1.0' encoding='ASCII'?>
    <Metadata xmlns="http://www.amazon.com/UnboxMetadata/v1">
    <Movie>
            <CountryOfOrigin>US</CountryOfOrigin>
            <TitleInfo>
                    <Title locale="en-GB">The Title</Title>
                    </TitleInfo>    
    </Movie>
    </Metadata>
    

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 2011-01-06
      • 1970-01-01
      • 2020-05-06
      • 2023-03-12
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多