import httplib
from xml.dom import minidom
from types import StringTypes, ListType
+from lxml import etree
+from StringIO import StringIO
+
+from sfa.util.sfalogging import sfa_logger
class RSpec:
return self.rootNode.toprettyxml()
+ def __removeWhitespaceNodes(self, parent):
+ for child in list(parent.childNodes):
+ if child.nodeType == minidom.Node.TEXT_NODE and child.data.strip() == '':
+ parent.removeChild(child)
+ else:
+ self.__removeWhitespaceNodes(child)
+
def parseFile(self, filename):
"""
read a local xml file and store it as a dom object.
"""
dom = minidom.parse(filename)
+ self.__removeWhitespaceNodes(dom)
self.rootNode = dom.childNodes[0]
"""
read an xml string and store it as a dom object.
"""
- xml = xml.replace('\n', '').replace('\t', '').strip()
dom = minidom.parseString(xml)
+ self.__removeWhitespaceNodes(dom)
self.rootNode = dom.childNodes[0]
def _parseXSD(self, xsdURI):
"""
- Download XSD from URL, or if file, read local xsd file and set schemaDict
+ Download XSD from URL, or if file, read local xsd file and set
+ schemaDict.
+
+ Since the schema definiton is a global namespace shared by and
+ agreed upon by others, this should probably be a URL. Check
+ for URL, download xsd, parse, or if local file, use that.
"""
- # Since the schema definiton is a global namespace shared by and agreed upon by
- # others, this should probably be a URL. Check for URL, download xsd, parse, or
- # if local file, use local file.
schemaDom = None
if xsdURI.startswith("http"):
try:
except Exception, e:
# logging.debug("%s: web file not found" % xsdURI)
# logging.debug("Using local file %s" % self.xsd")
- print e
- print "Can't find %s on the web. Continuing." % xsdURI
+ sfa_logger.log_exc("rspec.parseXSD: can't find %s on the web. Continuing." % xsdURI)
if not schemaDom:
if os.path.exists(xsdURI):
# logging.debug("using local copy.")
- print "Using local %s" % xsdURI
+ sfa_logger.debug("rspec.parseXSD: Using local %s" % xsdURI)
schemaDom = minidom.parse(xsdURI)
else:
- raise Exception("Can't find xsd locally")
+ raise Exception("rspec.parseXSD: can't find xsd locally")
self.schemaDict = self.toDict(schemaDom.childNodes[0])