diff options
Diffstat (limited to 'xmlio.py')
-rwxr-xr-x | xmlio.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/xmlio.py b/xmlio.py new file mode 100755 index 0000000..86b3b9e --- /dev/null +++ b/xmlio.py @@ -0,0 +1,56 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# reads and writes xml files +# output files indented + +import xml.etree.ElementTree as ET + +#tree = Xmlio(path) +#elem = tree.getroot() +#tree.save(path) --- uses root of tree +#tree.save(path,root=elem) -- saves tree from supplied root element + +class Xmlio(): + + def __init__(self, path = None, root = None): + print 'params: path=', path, 'root=', root + if root: + if path: + self.root = root + self.tree = ET.ElementTree(self.root) + else: + self.root = ET.Element(root) + self.tree = ET.ElementTree(self.root) + else: + try: + self.tree = ET.parse(path) + except: + print "error parsing xml file", path + return + self.root = self.tree.getroot() + + def getroot(self, root = ''): + if not root: + return self.root + else: + return ET.Element(root) + + def indent(self, elem, level=0): + i = "\n" + level * " " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + for elem in elem: + self.indent(elem, level+1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + + def save(self, path, root = ''): + if not root: + root = self.root + self.indent(root) #prettyprint + ET.ElementTree(root).write(path) |