1 import sys, os
2 try:
3 import xml.etree.cElementTree as ET
4 except ImportError:
5 import cElementTree as ET
6 import Utils.ElementTreeUtils as ETUtils
7
8 if __name__=="__main__":
9 from optparse import OptionParser
10 optparser = OptionParser(usage="%prog [options]\n")
11 optparser.add_option("-i", "--input", default=None, dest="input", help="File from which is read the XML-structure from which elements are copied", metavar="FILE")
12 optparser.add_option("-o", "--output", default=None, dest="output", help="The file to which the new XML structure is saved. If None, will be the same as target.", metavar="FILE")
13 (options, args) = optparser.parse_args()
14
15 print >> sys.stderr, "Loading input file", options.input
16 sourceTree = ET.parse(options.input)
17 sourceRoot = sourceTree.getroot()
18
19 print >> sys.stderr, "Removing dependencies"
20 parsesElements = sourceRoot.getiterator("parses")
21 for parsesElement in parsesElements:
22 for parseElement in parsesElement.findall("parse"):
23 dependencies = parseElement.findall("dependency")
24 toRemove = [False] * len(dependencies)
25 for i in range(0, len(dependencies)-1):
26 for j in range(i+1, len(dependencies)):
27 di = dependencies[i]
28 dj = dependencies[j]
29 if di.attrib["type"] == dj.attrib["type"] and di.attrib["t1"] == dj.attrib["t1"] and di.attrib["t2"] == dj.attrib["t2"]:
30 toRemove[j] = True
31 count = 0
32 for i in range(0, len(dependencies)):
33 if toRemove[i]:
34 parseElement.remove(dependencies[i])
35 count += 1
36 print >> sys.stderr, "Parse:", parseElement.attrib["parser"], "Removed:", count
37
38 print >> sys.stderr, "Writing output", options.output
39 ETUtils.write(sourceRoot, options.output)
40