根据子标记值删除标记和内容 - python lxml

时间:2013-07-11 13:09:32

标签: python xml lxml

我正在尝试根据子项的内容找到特定标记并删除父标记和内容,但无法找到答案。这是我的xml:

<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>

我想要做的是搜索<role>Primary</role>块中是否存在<crew>,如果是,我想要删除<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>标记及其内容。 亲切的问候。

1 个答案:

答案 0 :(得分:2)

使用xpath:

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