def transform(self, styleSheet, targetFile = None, encoding = 'UTF-8', **parameters): """ Transforms XML DOM tree using given XSLT stylesheet. Caller is responsible for deleting created temporary file if argument targetFile is not given. Parameters: - styleSheet: Stylesheet file path string. - targetFile Target path of the output file. - encoding: Output encoding format(default: UTF-8). - **parameters: Transform parameter keyword arguments. Return: - targetFile path. """ # Create temporary file, if targetFile argument is missing. if not targetFile: targetFile = tempfile.mktemp(suffix = '.tmp') # Parse XML and XSLT documents. with XmlReader.Create(styleSheet) as xsltDoc: # Set DtdProcessing to Parse in order to get XmlReader to accept it xmlReaderSettings = XmlReaderSettings() xmlReaderSettings.DtdProcessing = DtdProcessing.Parse with StringReader(self.toxml()) as stringReader: with XmlReader.Create(stringReader,xmlReaderSettings) as xmlDoc: #xmlDoc = xmlDocReader.Create(stringReader,xmlReaderSettings) transform = XslCompiledTransform() transform.Load(xsltDoc) # open destination file handle targetFileObj = File.OpenWrite(targetFile) # create xslt argument list for transformation xsltArgumentList = XsltArgumentList() for key, value in parameters.iteritems(): xsltArgumentList.AddParam(key, "", value) # make xslt transformation transform.Transform(xmlDoc, xsltArgumentList, targetFileObj) # close destination file handle targetFileObj.Close() return targetFile
def __init__(self, target=None, validating=False): if not compas.is_ironpython(): raise Exception( 'CLRXMLTreeParser can only be used from IronPython') settings = XmlReaderSettings() settings.IgnoreComments = True settings.IgnoreProcessingInstructions = True settings.IgnoreWhitespace = True if not validating: settings.DtdProcessing = DtdProcessing.Ignore settings.ValidationType = getattr(ValidationType, 'None') else: settings.DtdProcessing = DtdProcessing.Parse settings.ValidationType = ValidationType.DTD self.settings = settings self._target = (target if (target is not None) else ET.TreeBuilder()) self._buffer = [] self._document_encoding = 'UTF-8' # default
def __init__(self, target=DoctypeTreeBuilder(), validating=False): """ :keyword xml.etree.ElementTree.TreeBuilder target: the target object (optional; defaults to :class:`aglyph._compat.DoctypeTreeBuilder`) :keyword bool validating: specify ``True`` to use a validating parser """ settings = XmlReaderSettings() settings.IgnoreComments = True settings.IgnoreProcessingInstructions = True settings.IgnoreWhitespace = True if not validating: settings.DtdProcessing = DtdProcessing.Ignore settings.ValidationType = getattr(ValidationType, "None") else: settings.DtdProcessing = DtdProcessing.Parse settings.ValidationType = ValidationType.DTD self.settings = settings self.version = platform.python_compiler() self.__log.debug("ET parser version is %s", self.version) self._target = target self._buffer = []
def parse(xml): # see issue 379, and https://stackoverflow.com/questions/215854/ settings = XmlReaderSettings() settings.XmlResolver = None settings.DtdProcessing = DtdProcessing.Ignore settings.ProhibitDtd = False with XmlReader.Create(xml, settings) as xr: while xr.Read(): xr.MoveToContent() node = XmlNode(xr) yield node if xr.IsEmptyElement: node.nodeType = XmlNodeType.EndElement del node.attributes yield node
def parse(xml): # see issue 379, and https://stackoverflow.com/questions/215854/ settings = XmlReaderSettings(); settings.XmlResolver = None; settings.DtdProcessing = DtdProcessing.Ignore; settings.ProhibitDtd = False; with XmlReader.Create(xml, settings) as xr: while xr.Read(): xr.MoveToContent() node = XmlNode(xr) yield node if (xr.IsEmptyElement): node.nodeType = XmlNodeType.EndElement del node.attributes yield node
def validateDtd(self): """Validate xml file's dtd.""" # Validata XML files with internal DTD. xmlFile = self.getXMLData() if os.path.isfile(xmlFile) and self._dtdValidate: oFile = open(xmlFile, 'rb') xmlData = oFile.read() oFile.close() # Set DtdProcessing to Parse in order to get XmlReader to accept it xmlReaderSettings = XmlReaderSettings() xmlReaderSettings.DtdProcessing = DtdProcessing.Parse with StringReader(xmlData) as stringReader: # just create xml reader instance to validate with XmlReader.Create(stringReader,xmlReaderSettings) as xmlReader: pass