Differences between revisions 13 and 14
Revision 13 as of 2010-01-07 15:09:01
Size: 2600
Editor: PaulBoddie
Comment: Tidy up edits.
Revision 14 as of 2011-02-26 09:34:03
Size: 2948
Editor: StefanBehnel
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
'''NOTE''': MiniDOM is a slow and very memory hungry DOM implementation. If you are looking for a fast, memory efficient and simple to use tool for working with XML, try ElementTree instead (in the [[http://docs.python.org/library/xml.etree.elementtree.html | xml.etree]] package), or use the external [[http://lxml.de/ | lxml]] implementation.

NOTE: MiniDOM is a slow and very memory hungry DOM implementation. If you are looking for a fast, memory efficient and simple to use tool for working with XML, try ElementTree instead (in the xml.etree package), or use the external lxml implementation.

Some notes on how to use xml.dom.minidom:

   1 from xml.dom.minidom import parse, parseString
   2 
   3 dom1 = parse( "foaf.rdf" )   # parse an XML file
   4 dom2 = parseString( "<myxml>Some data <empty/> some more data</myxml>" )
   5 print dom1.toxml()
   6 print dom2.toxml()

Examples of Use

  • node.nodeName
  • node.nodeValue
  • node.childNodes

Find Elements

You can manually walk through the childNodes tree, comparing nodeNames.

You might be able to use getElementsByTagName as well:

   1 from xml.dom.minidom import parse
   2 dom = parse("foo.xml")
   3 for node in dom.getElementsByTagName('bar'):  # visit every node <bar />
   4     print node.toxml()

getElementsByTagName finds all children of a given name, no matter how deep, thus working recursively. This is usually good, but can cause problems if similar nodes exist at multiple levels and the intervening nodes are important.

Add an Element

Create & add an XML element (Something like <foo />) to an XML document.

   1 from xml.dom.minidom import parse
   2 dom = parse("bar.xml")
   3 x = dom.createElement("foo")  # creates <foo />
   4 dom.childNodes[1].appendChild(x)  # appends at end of 1st child's children
   5 print dom.toxml()

Add an Element with Text Inside

Create & add an XML element to an XML document, the element has text inside.

ex: <foo>hello, world!</foo>

   1 from xml.dom.minidom import parse
   2 dom = parse("bar.xml")
   3 x = dom.createElement("foo")  # creates <foo />
   4 txt = dom.createTextNode("hello, world!")  # creates "hello, world!"
   5 x.appendChild(txt)  # results in <foo>hello, world!</foo>
   6 dom.childNodes[1].appendChild(x)  # appends at end of 1st child's children
   7 print dom.toxml()

Import a Node

You can use DOM 2 "importNode" to take part of one XML document, and put it into another XML document.

   1 from xml.dom.minidom import parse
   2 dom1 = parse("foo.xml")
   3 dom2 = parse("bar.xml")
   4 x = dom1.importNode(dom2.childNodes[1],  # take 2nd node in "bar.xml"
   5                     True)  # deep copy
   6 dom1.childNodes[1].appendChild(x)  # append to children of 2nd node in "foo.xml"
   7 print dom1.toxml()

See Also

MiniDom (last edited 2012-03-07 11:43:42 by MartinvonLoewis)

Unable to edit the page? See the FrontPage for instructions.