]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Python/XmlRoutines.py
Changing XmlAppendChildElement to return the new XML node on success.
[mirror_edk2.git] / Tools / Python / XmlRoutines.py
index 53f5aa8f6157057b24cdf4d965923be3859d6c0e..3ffb84700988947035ab0a5924a54ef95ec40855 100755 (executable)
@@ -16,12 +16,12 @@ import xml.dom.minidom
 
 def XmlList(Dom, String):
   """Get a list of XML Elements using XPath style syntax."""
+  if String == "" :
+    return []
   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]:
@@ -33,6 +33,14 @@ def XmlList(Dom, String):
         nodes = nodes + XmlList(child, restOfPath)
   return nodes
 
+def XmlNode (Dom, String):
+  """Return a single node that matches the String which is XPath style syntax."""
+  try:
+    return XmlList (Dom, String)[0]
+  except:
+    return None
+
+
 def XmlElement (Dom, String):
   """Return a single element that matches the String which is XPath style syntax."""
   try:
@@ -65,6 +73,13 @@ def XmlParseFile (FileName):
   except:
     return xml.dom.minidom.parseString('<empty/>')
 
+def XmlParseString (Str):
+  """Parse an XML string into a DOM and return the DOM."""
+  try:
+    return xml.dom.minidom.parseString(Str)
+  except:
+    return xml.dom.minidom.parseString('<empty/>')
+
 def XmlParseFileSection (FileName, Tag):
   """Parse a section of an XML file into a DOM(Document Object Model) and return the DOM."""
   try:
@@ -88,6 +103,19 @@ def XmlParseFileSection (FileName, Tag):
   except:
     return xml.dom.minidom.parseString('<empty/>')
 
+def XmlParseStringSection (XmlString, Tag):
+  """Parse a section of an XML string into a DOM(Document Object Model) and return the DOM."""
+  Start = '<' + Tag
+  End = '</' + Tag + '>'
+  File = XmlString
+  if File.find(Start) < 0 or File.find(End) < 0:
+    return xml.dom.minidom.parseString('<empty/>')
+  File = File[File.find(Start):File.find(End)+len(End)]
+  try:
+    return xml.dom.minidom.parseString(File)
+  except:
+    return xml.dom.minidom.parseString('<empty/>')
+
 def XmlSaveFile (Dom, FileName, Encoding='UTF-8'):
   """Save a DOM(Document Object Model) into an XML file."""
   try:
@@ -115,14 +143,14 @@ def XmlAppendChildElement(ParentNode, TagName, ElementText='', AttributeDictiona
   """Add a child element to a DOM(Document Object Model) tree with optional Attributes."""
   TagName = TagName.strip()
   if TagName == '':
-    return False
+    return None
   Depth = 0
   Dom = ParentNode
   while Dom != None and Dom.nodeType != Dom.DOCUMENT_NODE:
     Dom = Dom.parentNode
     Depth += 1
   if Dom == None:
-    return False
+    return None
   ParentNode.appendChild(Dom.createTextNode('\n%*s' % (Depth * 2, '')))
   ElementNode = Dom.createElement(TagName)
   if ElementText != '':
@@ -130,7 +158,7 @@ def XmlAppendChildElement(ParentNode, TagName, ElementText='', AttributeDictiona
   for Item in AttributeDictionary:
     ElementNode.setAttribute(Item, AttributeDictionary[Item])
   ParentNode.appendChild(ElementNode)
-  return True
+  return ElementNode
   
 
 # This acts like the main() function for the script, unless it is 'import'ed into another