diff options
author | Cosimo Alfarano <cosimo.alfarano@collabora.co.uk> | 2010-01-29 19:02:04 +0000 |
---|---|---|
committer | Cosimo Alfarano <cosimo.alfarano@collabora.co.uk> | 2010-01-29 19:02:04 +0000 |
commit | 2e520db643e63c674ad955212f143ce1997189f2 (patch) | |
tree | 5f6aad7531b1f38b176d69393a02b7d1642b3c5b /tools/xincludator.py | |
parent | deb5b0460352f8ae9031621360c64f33b5c1c70b (diff) | |
download | telepathy-logger-2e520db643e63c674ad955212f143ce1997189f2.tar.gz |
Added file for TP DBus extension support
Diffstat (limited to 'tools/xincludator.py')
-rwxr-xr-x | tools/xincludator.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tools/xincludator.py b/tools/xincludator.py new file mode 100755 index 0000000..63e106a --- /dev/null +++ b/tools/xincludator.py @@ -0,0 +1,39 @@ +#!/usr/bin/python + +from sys import argv, stdout, stderr +import codecs, locale +import os +import xml.dom.minidom + +stdout = codecs.getwriter('utf-8')(stdout) + +NS_XI = 'http://www.w3.org/2001/XInclude' + +def xincludate(dom, base, dropns = []): + remove_attrs = [] + for i in xrange(dom.documentElement.attributes.length): + attr = dom.documentElement.attributes.item(i) + if attr.prefix == 'xmlns': + if attr.localName in dropns: + remove_attrs.append(attr) + else: + dropns.append(attr.localName) + for attr in remove_attrs: + dom.documentElement.removeAttributeNode(attr) + for include in dom.getElementsByTagNameNS(NS_XI, 'include'): + href = include.getAttribute('href') + # FIXME: assumes Unixy paths + filename = os.path.join(os.path.dirname(base), href) + subdom = xml.dom.minidom.parse(filename) + xincludate(subdom, filename, dropns) + if './' in href: + subdom.documentElement.setAttribute('xml:base', href) + include.parentNode.replaceChild(subdom.documentElement, include) + +if __name__ == '__main__': + argv = argv[1:] + dom = xml.dom.minidom.parse(argv[0]) + xincludate(dom, argv[0]) + xml = dom.toxml() + stdout.write(xml) + stdout.write('\n') |