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')