File indexing completed on 2024-04-14 04:56:37

0001 #!/usr/bin/python
0002 
0003 import sys
0004 from sys import argv, stdout, stderr
0005 import codecs, locale
0006 import os
0007 import xml.dom.minidom
0008 
0009 if sys.version_info[0] < 3:
0010     stdout = codecs.getwriter('utf-8')(stdout)
0011 
0012 NS_XI = 'http://www.w3.org/2001/XInclude'
0013 
0014 def xincludate(dom, base, dropns = []):
0015     remove_attrs = []
0016     for i in range(dom.documentElement.attributes.length):
0017         attr = dom.documentElement.attributes.item(i)
0018         if attr.prefix == 'xmlns':
0019             if attr.localName in dropns:
0020                 remove_attrs.append(attr)
0021             else:
0022                 dropns.append(attr.localName)
0023     for attr in remove_attrs:
0024         dom.documentElement.removeAttributeNode(attr)
0025     for include in dom.getElementsByTagNameNS(NS_XI, 'include'):
0026         href = include.getAttribute('href')
0027         # FIXME: assumes Unixy paths
0028         filename = os.path.join(os.path.dirname(base), href)
0029         subdom = xml.dom.minidom.parse(filename)
0030         xincludate(subdom, filename, dropns)
0031         if './' in href:
0032             subdom.documentElement.setAttribute('xml:base', href)
0033         include.parentNode.replaceChild(subdom.documentElement, include)
0034 
0035 if __name__ == '__main__':
0036     argv = argv[1:]
0037     dom = xml.dom.minidom.parse(argv[0])
0038     xincludate(dom, argv[0])
0039 
0040     if sys.version_info[0] >= 3:
0041         xml = dom.toxml('utf-8')
0042         stdout.buffer.write(xml)
0043         stdout.buffer.write(b'\n')
0044     else:
0045         xml = dom.toxml()
0046         stdout.write(xml)
0047         stdout.write('\n')