1

I have a XML file where I have to remove all subElement nodes with "none" text by Python 3 facilities. I've tried to use xml.etree.ElementTree but its remove() method requies performing removal of a node from a direct anchestor of that node. Is there a simple conditional-based approach to traverse DOM-tree and remove current node if it contains a certain marker-word?

<?xml version="1.0" encoding="UTF-8"?>
<doc>
<block number="0">
<Element>7) Возраст</Element>
<subElement number="0">0-20</subElement>
<subElement number="1">21-25</subElement>
<subElement number="2">26-29</subElement>
<subElement number="3">31-39</subElement>
<subElement number="4">более 40</subElement>
<subElement number="5">none</subElement>
<subElement number="6">none</subElement>
<subElement number="7">none</subElement>
</block>
<block number="1">
<Element>9) Длительность заболевания</Element>
<subElement number="0">до 1 года</subElement>
<subElement number="1">от 1 года до 3 лет</subElement>
<subElement number="2">от 3 до 5 лет</subElement>
<subElement number="3">от 5 до 10 лет</subElement>
<subElement number="4">от 10 до 15 лет</subElement>
<subElement number="5">свыше 15 лет</subElement>
<subElement number="6">none</subElement>
<subElement number="7">none</subElement>
</block>
</doc>

`

import xml.etree.ElementTree as ET
     tree = ET.parse('data.xml')
     root = tree.getroot()
     for e in root.findall(".//subElement"):
         if e.text == 'none':
             root.remove(e)
     tree.write('out.xml')

`

  • What's wrong with using `remove()`? It's the standard way of removing nodes from a tree, it works just fine in this situation. Also, please show your code so far. – Tomalak Jan 20 '18 at 07:29
  • Code added. It throws error that "list.remove(x) doesn't contain x" – Nikita Glukhov Jan 20 '18 at 07:57
  • You cannot remove nodes from the root node that are not direct children of the root node. – Tomalak Jan 20 '18 at 08:13

0 Answers0