diff options
Diffstat (limited to 'Tools/Python/XmlRoutines.py')
-rwxr-xr-x | Tools/Python/XmlRoutines.py | 50 |
1 files changed, 50 insertions, 0 deletions
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 |