Exemple #1
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 #2
0
    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
Exemple #3
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 #4
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 #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