X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FPython%2FXmlRoutines.py;h=2707bcbb978c4fc08411c055cedf6a01e27b82cf;hp=6968f14aefa03f93ce847193726aa3d1fcdb6b59;hb=8d4243f1bd81497181a3cc135239422c43364105;hpb=e853a9d4831ae95363ce5fdcce71cbb23aff2269 diff --git a/Tools/Python/XmlRoutines.py b/Tools/Python/XmlRoutines.py index 6968f14aef..2707bcbb97 100755 --- a/Tools/Python/XmlRoutines.py +++ b/Tools/Python/XmlRoutines.py @@ -27,13 +27,13 @@ def XmlList(Dom, String): 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(' ') + return XmlList (Dom, String)[0].firstChild.data.strip() except: return '' def XmlElementData (Dom): """Get the text for this element.""" - return Dom.firstChild.data.strip(' ') + return Dom.firstChild.data.strip() def XmlAttribute (Dom, String): """Return a single attribute that named by String.""" @@ -46,6 +46,83 @@ def XmlTopTag(Dom): """Return the name of the Root or top tag in the XML tree.""" return Dom.firstChild.nodeName +def XmlParseFile (FileName): + """Parse an XML file into a DOM and return the DOM.""" + try: + f = open(FileName, 'r') + Dom = xml.dom.minidom.parse(f) + f.close() + return Dom + except: + return xml.dom.minidom.parseString('') + +def XmlParseFileSection (FileName, Tag): + """Parse a section of an XML file into a DOM(Document Object Model) and return the DOM.""" + try: + f = open(FileName, 'r') + except: + return xml.dom.minidom.parseString('') + Start = '<' + Tag + End = '' + File = '' + while File.find(Start) < 0 or File.find(End) < 0: + Section = f.read(0x1000) + if Section == '': + break + File += Section + f.close() + if File.find(Start) < 0 or File.find(End) < 0: + return xml.dom.minidom.parseString('') + File = File[File.find(Start):File.find(End)+len(End)] + try: + return xml.dom.minidom.parseString(File) + except: + return xml.dom.minidom.parseString('') + +def XmlSaveFile (Dom, FileName, Encoding='UTF-8'): + """Save a DOM(Document Object Model) into an XML file.""" + try: + f = open(FileName, 'w') + f.write(Dom.toxml(Encoding).replace('"','"').replace('>','>')) + f.close() + return True + except: + return False + +def XmlRemoveElement(Node): + """Remove an element node from DOM(Document Object Model) tree.""" + ParentNode = Node.parentNode + if ParentNode == None: + return False + PreviousSibling = Node.previousSibling + while PreviousSibling != None and PreviousSibling.nodeType == PreviousSibling.TEXT_NODE and PreviousSibling.data.strip() == '': + Temp = PreviousSibling + PreviousSibling = PreviousSibling.previousSibling + ParentNode.removeChild(Temp) + ParentNode.removeChild(Node) + return True + +def XmlAppendChildElement(ParentNode, TagName, ElementText='', AttributeDictionary = {}): + """Add a child element to a DOM(Document Object Model) tree with optional Attributes.""" + TagName = TagName.strip() + if TagName == '': + return False + Depth = 0 + Dom = ParentNode + while Dom != None and Dom.nodeType != Dom.DOCUMENT_NODE: + Dom = Dom.parentNode + Depth += 1 + if Dom == None: + return False + ParentNode.appendChild(Dom.createTextNode('\n%*s' % (Depth * 2, ''))) + ElementNode = Dom.createElement(TagName) + if ElementText != '': + ElementNode.appendChild(Dom.createTextNode(ElementText)) + for Item in AttributeDictionary: + ElementNode.setAttribute(Item, AttributeDictionary[Item]) + ParentNode.appendChild(ElementNode) + return True + # This acts like the main() function for the script, unless it is 'import'ed into another # script.