2013-07-11 106 views
1

我想找到一個特定的標籤,基於它的孩子的內容和刪除父標籤和內容,但無法找到答案。這裏是我的xml:基於子標籤值刪除標籤和內容 - python lxml

<video> 
    <crew> 
     <member billing="top"> 
     <name>Some Guy</name> 
     <roles> 
      <role>Painter</role> 
      <role>Decorator</role> 
     </roles> 
     </crew> 
     <crew billing="top"> 
     <name>Another Guy</name> 
     <roles> 
      <role>Primary</role> 
     </roles> 
     </crew> 
    </crew> 
</video> 

我想要做的就是搜索,看是否存在於<crew><role>Primary</role>,如果它想刪除整個<crew>塊,其中<role>Primary</role>存在的,它的父。 那麼結果將是:

<video> 
    <crew> 
     <member billing="top"> 
     <name>Some Guy</name> 
     <roles> 
      <role>Painter</role> 
      <role>Decorator</role> 
     </roles> 
     </crew> 
</video> 

它有時沒底,也許埋藏許多其他<crew>標籤內,所以我知道,如果該塊包含<role>Primary</role>我想刪除整個<crew>塊駐留英寸 我曾嘗試:

for find1 in root.iter(tag='role'): 
    find1 = find1.text 
    if find1 == "Primary": 
     path = tree.xpath('//video/crew') 
     etree.strip_elements(path, 'member') 

但刪除了每個<crew>標籤和它的內容。 親切的問候。

+0

給定的XML是無效的。 – falsetru

回答

2

使用XPath:

for crew in root.xpath('.//crew[descendant::role[contains(text(), "Primary")]]'): 
    crew.getparent().remove(crew) 
+0

非常好的解決方案,非常感謝。 – speedyrazor

+0

這是有效的,但刪除兩個工作人員,我只想刪除其中的主要人。 – speedyrazor

+0

@ user2446702,使用問題中給出的xml,我的答案代碼只刪除'Another Guy'。 – falsetru