2013-08-17 45 views
2

我想刪除包含命名空間的xml中的元素。 這裏是我的代碼:python刪除包含命名空間的元素

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,徹底刪除整個標記及其內容的演員的標籤。但它不起作用。

回答

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>