|
Packit |
79f644 |
#!/usr/bin/python
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
import sys
|
|
Packit |
79f644 |
from sys import argv, stdout, stderr
|
|
Packit |
79f644 |
import codecs, locale
|
|
Packit |
79f644 |
import os
|
|
Packit |
79f644 |
import xml.dom.minidom
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if sys.version_info[0] < 3:
|
|
Packit |
79f644 |
stdout = codecs.getwriter('utf-8')(stdout)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
NS_XI = 'http://www.w3.org/2001/XInclude'
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
def xincludate(dom, base, dropns = []):
|
|
Packit |
79f644 |
remove_attrs = []
|
|
Packit |
79f644 |
for i in range(dom.documentElement.attributes.length):
|
|
Packit |
79f644 |
attr = dom.documentElement.attributes.item(i)
|
|
Packit |
79f644 |
if attr.prefix == 'xmlns':
|
|
Packit |
79f644 |
if attr.localName in dropns:
|
|
Packit |
79f644 |
remove_attrs.append(attr)
|
|
Packit |
79f644 |
else:
|
|
Packit |
79f644 |
dropns.append(attr.localName)
|
|
Packit |
79f644 |
for attr in remove_attrs:
|
|
Packit |
79f644 |
dom.documentElement.removeAttributeNode(attr)
|
|
Packit |
79f644 |
for include in dom.getElementsByTagNameNS(NS_XI, 'include'):
|
|
Packit |
79f644 |
href = include.getAttribute('href')
|
|
Packit |
79f644 |
# FIXME: assumes Unixy paths
|
|
Packit |
79f644 |
filename = os.path.join(os.path.dirname(base), href)
|
|
Packit |
79f644 |
subdom = xml.dom.minidom.parse(filename)
|
|
Packit |
79f644 |
xincludate(subdom, filename, dropns)
|
|
Packit |
79f644 |
if './' in href:
|
|
Packit |
79f644 |
subdom.documentElement.setAttribute('xml:base', href)
|
|
Packit |
79f644 |
include.parentNode.replaceChild(subdom.documentElement, include)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if __name__ == '__main__':
|
|
Packit |
79f644 |
argv = argv[1:]
|
|
Packit |
79f644 |
dom = xml.dom.minidom.parse(argv[0])
|
|
Packit |
79f644 |
xincludate(dom, argv[0])
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if sys.version_info[0] >= 3:
|
|
Packit |
79f644 |
xml = dom.toxml(encoding=None)
|
|
Packit |
79f644 |
else:
|
|
Packit |
79f644 |
xml = dom.toxml()
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
stdout.write(xml)
|
|
Packit |
79f644 |
stdout.write('\n')
|