summaryrefslogtreecommitdiff
path: root/Tools/Python/XmlRoutines.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Python/XmlRoutines.py')
-rwxr-xr-xTools/Python/XmlRoutines.py83
1 files changed, 80 insertions, 3 deletions
diff --git a/Tools/Python/XmlRoutines.py b/Tools/Python/XmlRoutines.py
index 9d1ff4a0e3..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."""
@@ -44,7 +44,84 @@ def XmlAttribute (Dom, String):
def XmlTopTag(Dom):
"""Return the name of the Root or top tag in the XML tree."""
- return Dom.documentElement.nodeName
+ 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('<empty/>')
+
+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('<empty/>')
+ Start = '<' + Tag
+ End = '</' + Tag + '>'
+ 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('<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:
+ f = open(FileName, 'w')
+ f.write(Dom.toxml(Encoding).replace('&quot;','"').replace('&gt;','>'))
+ 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