def deserialize(self, source, prefixes=None, strict=False, as_attribute=None, as_list=None, as_attribute_of_element=None): if isinstance(source, basestring): try: if os.path.exists(source): xtr = XmlTextReader(StreamReader(source)) except ValueError: xtr = XmlTextReader(StringReader(source)) else: xtr = XmlTextReader(StringReader(source)) elif hasattr(source, 'read'): xtr = XmlTextReader(StringReader(source.read())) settings = XmlReaderSettings() settings.ProhibitDtd = True reader = XmlReader.Create(xtr, settings) document = Document() document.as_attribute = as_attribute or {} document.as_list = as_list or {} document.as_attribute_of_element = as_attribute_of_element or {} self._deserialize(reader, document) xtr.Close() reader.Close() return document
def read(self, textreader): settings = XmlReaderSettings() settings.IgnoreWhitespace = True reader = XmlReader.Create(textreader, settings) self._currentElement = None nodeTypeHandlers = { XmlNodeType.Element : self.onStartElement, XmlNodeType.EndElement : self.onEndElement, XmlNodeType.Text : self.onText, XmlNodeType.XmlDeclaration: ignore } try: while reader.Read(): handler = nodeTypeHandlers.get(reader.NodeType) if handler: handler(reader) else: print reader.NodeType raise XmlException("invalid data at line %d" % reader.LineNumber) finally: reader.Close()
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 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
def __init__(self): Parser.__init__(self) self.settings = XmlReaderSettings() self.settings.ProhibitDtd = True self.settings.CloseInput = False self.buffered_parser = BridgeBufferedParser() self.buffered_parser.on_closed_tag = self._handle_fragment self.buffered_parser.on_start_tag_completed = self._handle_empty_fragment
def _parse(self, reader): settings = XmlReaderSettings(ProhibitDtd=False) reader = XmlReader.Create(reader, settings) self._reader = reader while reader.Read(): nodetype = reader.NodeType typename = Enum.GetName(XmlNodeType, nodetype) handler = getattr(self, '_handle_' + typename, None) if handler is not None: handler()
def __init__(self, target=None, validating=False): if not compas.IPY: 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 or 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 = []