2

名前空間を含む 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 タグを検索し、そのタグとその内容を完全に削除しようとしています。しかし、それは機能していません。

4

1 に答える 1

2

使用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-08-17T19:56:13.840 に答える