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
Exemple #2
0
    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
Exemple #3
0
    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()
Exemple #4
0
    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
Exemple #5
0
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
Exemple #7
0
 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
Exemple #8
0
    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
Exemple #9
0
 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()
Exemple #10
0
    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
Exemple #11
0
        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 = []
Exemple #12
0
        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 = []