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

标签 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> block ,如果是的话我想删除整个 <crew>阻止<role>Primary</role>存在于,它的父级。 所以结果是:

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

它有时不是最后,可能被埋在许多其他 <crew> 中标签,所以我知道该 block 是否包含 <role>Primary</role>我想删除整个 <crew>它所在的 block 。 我尝试过:

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

但这会删除所有 <crew>标签及其内容。 亲切的问候。

最佳答案

使用 xpath:

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

关于python - 根据子标签值删除标签和内容 - python lxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594274/

相关文章:

c# - 如何使用 LINQ to XML 将 List<T> 序列化为 XML?

python - lxml - 如何获取 HtmlElement 的 xpath?

python - Gitstats Eclipse

Python:如何在基类的方法中获取子类的新属性名称?

python - HOG人物检测opencv使用WEBCAM

c++ - 使用 TinyXml2 提取子树 XML 字符串

python - 使用seaborn.facetgrid,如何指定映射散点图的颜色以反射(reflect)数据框中列的值?

xml - 我不想解析 XML 中的某些标签

python - "undefined symbol: __xmlStructuredErrorContext"从 lxml 导入 etree

xpath - 无法使用 lxml 按属性查找元素