From 77afa5eb93159785953d700161914153b751706f Mon Sep 17 00:00:00 2001 From: bbahnsen Date: Tue, 5 Dec 2006 21:57:04 +0000 Subject: [PATCH] Factor out the XML API so other scripts can use it. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2049 6f19259b-4bc3-4df7-8a09-765794883524 --- Tools/Python/XmlRoutines.py | 50 +++++++++++++++++++++++++++++++++++++ Tools/Python/calcdeps.py | 38 +--------------------------- 2 files changed, 51 insertions(+), 37 deletions(-) create mode 100755 Tools/Python/XmlRoutines.py diff --git a/Tools/Python/XmlRoutines.py b/Tools/Python/XmlRoutines.py new file mode 100755 index 0000000000..20671ea407 --- /dev/null +++ b/Tools/Python/XmlRoutines.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python + +# This is an XML API that uses a syntax similar to XPath, but it is written in +# standard python so that no extra python packages are required to use it. + +import xml.dom.minidom + +def XmlList(Dom, String): + """Get a list of XML Elements using XPath style syntax.""" + if Dom.nodeType==Dom.DOCUMENT_NODE: + return XmlList(Dom.documentElement, String) + if String[0] == "/": + return XmlList(Dom, String[1:]) + if String == "" : + return [] + TagList = String.split('/') + nodes = [] + if Dom.nodeType == Dom.ELEMENT_NODE and Dom.tagName.strip() == TagList[0]: + if len(TagList) == 1: + nodes = [Dom] + else: + restOfPath = "/".join(TagList[1:]) + for child in Dom.childNodes: + nodes = nodes + XmlList(child, restOfPath) + return nodes + +def XmlElement (Dom, String): + """Return a single element that matches the String which is XPath style syntax.""" + try: + return XmlList (Dom, String)[0].firstChild.data.strip(' ') + except: + return '' + +def XmlElementData (Dom): + """Get the text for this element.""" + return Dom.firstChild.data.strip(' ') + +def XmlAttribute (Dom, String): + """Return a single attribute that named by String.""" + try: + return Dom.getAttribute(String) + except: + return '' + +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +if __name__ == '__main__': + + # Nothing to do here. Could do some unit tests. + pass diff --git a/Tools/Python/calcdeps.py b/Tools/Python/calcdeps.py index 5372bcce1d..a0afa3f432 100755 --- a/Tools/Python/calcdeps.py +++ b/Tools/Python/calcdeps.py @@ -5,6 +5,7 @@ code to see what guids and functions are referenced to see which Packages and Library Classes need to be referenced. """ import os, sys, re, getopt, string, glob, xml.dom.minidom, pprint +from XmlRoutines import * # Map each function name back to the lib class that declares it. function_table = {} @@ -12,43 +13,6 @@ function_table = {} # Map each guid name to a package name. cname_table = {} -def XmlList(Dom, String): - """Get a list of XML Elements using XPath style syntax.""" - if Dom.nodeType==Dom.DOCUMENT_NODE: - return XmlList(Dom.documentElement, String) - if String[0] == "/": - return XmlList(Dom, String[1:]) - if String == "" : - return [] - TagList = String.split('/') - nodes = [] - if Dom.nodeType == Dom.ELEMENT_NODE and Dom.tagName.strip() == TagList[0]: - if len(TagList) == 1: - nodes = [Dom] - else: - restOfPath = "/".join(TagList[1:]) - for child in Dom.childNodes: - nodes = nodes + XmlList(child, restOfPath) - return nodes - -def XmlElement (Dom, String): - """Return a single element that matches the String which is XPath style syntax.""" - try: - return XmlList (Dom, String)[0].firstChild.data.strip(' ') - except: - return '' - -def XmlElementData (Dom): - """Get the text for this element.""" - return Dom.firstChild.data.strip(' ') - -def XmlAttribute (Dom, String): - """Return a single attribute that named by String.""" - try: - return Dom.getAttribute(String) - except: - return '' - def inWorkspace(rel_path): """Treat the given path as relative to the workspace."""