Aditya Kuls Aditya Kuls - 5 months ago 11
Python Question

Deleting xml tags with particular Element name using xml.dom in python

How can we delete tags with particular Element name in an xml code using

xml.dom
(not
lxml.etree
) in python.

e.g. if we have the following xml code:

<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
<book id="bk104">
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-03-10</publish_date>
<description>In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
Ascendant.</description>
</book>
</catalog>


How can we delete all the tags named
<title>
using
xml.dom
in python?

Answer

Select all the elements by title tag and remove them using removeChild

Update:

from xml.dom import minidom
xmldoc = minidom.parse("book_xml.xml")

nodes = xmldoc.getElementsByTagName("title")

for node in nodes:
    parent = node.parentNode
    parent.removeChild(node) 

print xmldoc.toxml()

You can also write new changes to xml file by :

with open("result.xml","w") as fs:
    fs.write(xmldoc.toxml())
    fs.close()