From 58ec94a477f5edef0bf75a60252af96adec34d8d Mon Sep 17 00:00:00 2001 From: rcoh Date: Sat, 19 Feb 2011 00:38:03 -0500 Subject: Added XML introspection script (XmlInfo.py). Should make reading XML files a lot easier for us humans! --- XmlInfo.py | 47 ++++++++++++++++++++++++++++++++++++++++++ tests/testdata/XmlInfoTest.xml | 30 +++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 XmlInfo.py create mode 100644 tests/testdata/XmlInfoTest.xml diff --git a/XmlInfo.py b/XmlInfo.py new file mode 100644 index 0000000..59ece57 --- /dev/null +++ b/XmlInfo.py @@ -0,0 +1,47 @@ +#!/usr/bin/python +import util.Config as config +import util.Search as search +import sys +"""XmlInfo.py is a module for quick introspection of XML Documents. It will print all the Ids of +the components defined in an XML document and (if possible) their Doc strings. Usage: + python XmlInfo.py [fileName] [-b] [-i] + Example: + python XmlInfo.py config/C5Sign.xml + +With no flags all components are printed. With -b, behaviors are printed. With -i, inputs are +printed. (And both if both are specified) +""" +def loadFile(args): + fileName = args[1] + parentTags = [] + if '-b' in args: + parentTags.append('BehaviorConfiguration') + if '-i' in args: + parentTags.append('InputConfiguration') + if not parentTags: + parentTags = ['InputConfiguration', 'BehaviorConfiguration','PixelConfiguration', + 'RendererConfiguration'] + confRoot = config.loadConfigFile(fileName).getroot() + for tag in parentTags: + subTree = confRoot.find(tag) + print tag + ':' + nodesWithArgs = search.parental_tree_search(subTree,'.getchildren()', ".tag=='Args'") + nodesWithDocs = search.parental_tree_search(subTree,'.getchildren()', ".tag=='Doc'") + for obj in nodesWithArgs: + args = obj.find('Args') + cidEl = args.find('Id') + docEl = args.find('Doc') or obj.find('Doc') + classEl = obj.find('Class') + cid = None + doc = None + className = None + if cidEl != None: + cid = cidEl.text + if docEl != None: + doc = docEl.text + if classEl != None: + className = classEl.text + print '\tComponent %(id)s - Doc: %(doc)s - Class: %(class)s' % {'id':cid, 'doc':doc, + 'class':className} +if __name__ == "__main__": + loadFile(sys.argv) diff --git a/tests/testdata/XmlInfoTest.xml b/tests/testdata/XmlInfoTest.xml new file mode 100644 index 0000000..c79896a --- /dev/null +++ b/tests/testdata/XmlInfoTest.xml @@ -0,0 +1,30 @@ + + + + simplemap + + + + layouts/C5SignLayout.xml + + + + pixelmappers.C5SignMapper + + simplemap + 20 + SimpleMapper is a mapper which returns the closest pixel. + + + + pixelmappers.GaussianMapper + + gaussmap + 30 + 0.1 + 7 + 1 + + + + -- cgit v1.2.3