Пример #1
0
 def test_parse_again(self):
     parser = expat.ParserCreate()
     file = StringIO.StringIO(data)
     parser.ParseFile(file)
     # Issue 6676: ensure a meaningful exception is raised when attempting
     # to parse more than one XML document per xmlparser instance,
     # a limitation of the Expat library.
     with self.assertRaises(expat.error) as cm:
         parser.ParseFile(file)
     self.assertEqual(expat.ErrorString(cm.exception.code),
                      expat.errors.XML_ERROR_FINISHED)
Пример #2
0
 def parse(self, input, root=None, bInRootTag=0):
     """ Builder.parse """
     
     # prepare builder
     self._unknownTagName  = None
     self.oRoot            = root
     self.oRootNode        = None
     self.oCurrNode        = None
     self.bInRootTag       = bInRootTag
     self.bInCData         = False
     if bInRootTag:
       self.oCurrNode = root
     
     # create parser object
     p = pyexpat.ParserCreate()
     
     # connect parser object with handler methods
     p.StartElementHandler = self.OnStartElement
     p.EndElementHandler = self.OnEndElement
     p.CharacterDataHandler = self.OnCharacterData
     p.StartCdataSectionHandler = self.OnStartCData
     p.EndCdataSectionHandler = self.OnEndCData
     p.ProcessingInstructionHandler = self.OnProcessingInstruction
     p.CommentHandler = self.OnComment
     p.StartNamespaceDeclHandler = self.OnStartNamespaceDecl
     p.EndNamespaceDeclHandler = self.OnEndNamespaceDecl
     
     #### parsing ####
     _globals.writeLog( self, "#### parsing ####")
     if type(input) is str:
       # input is a string!
       rv = p.Parse(input, 1)
     else:
       # input is a file object!
       while True:
         
         v=input.read(self.iBufferSize)
         if v=="":
           rv = 1
           break
         
         rv = p.Parse(v, 0)
         if not rv:
           break 
     
     # raise parser exception
     if not rv:
         raise ParseError('%s at line %s' % (pyexpat.ErrorString(p.ErrorCode), p.ErrorLineNumber))
     ####
     
     return self.oRootNode
Пример #3
0
    def parse(self, input, root=None, bInRootTag=0):
        """ Builder.parse """
        
        # prepare builder
        self.oRootTag         = None
        self.oCurrNode        = None
        self.bInCData         = False
        if bInRootTag:
          self.oCurrNode = root
        
        # create parser object
        p = pyexpat.ParserCreate()
        
        # connect parser object with handler methods
        p.StartElementHandler = self.OnStartElement
        p.EndElementHandler = self.OnEndElement
        p.CharacterDataHandler = self.OnCharacterData
        p.StartCdataSectionHandler = self.OnStartCData
        p.EndCdataSectionHandler = self.OnEndCData
        p.ProcessingInstructionHandler = self.OnProcessingInstruction
        p.CommentHandler = self.OnComment
        p.StartNamespaceDeclHandler = self.OnStartNamespaceDecl
        p.EndNamespaceDeclHandler = self.OnEndNamespaceDecl
        
        #### parsing ####
        if isinstance(input,bytes):
          # input is a string!
          rv = p.Parse(input, 1)
        else:
          # input is a file object!
          while True:
            
            v=input.read(self.iBufferSize)
            if v=="":
              rv = 1
              break
            
            rv = p.Parse(v, 0)
            if not rv:
              break 
        
        # raise parser exception
        if not rv:
            raise ParseError('%s at line %s' % (pyexpat.ErrorString(p.ErrorCode), p.ErrorLineNumber))
        ####

        # reindex
        standard.triggerEvent( self, '*.ObjectImported')
        ####

        return root
Пример #4
0
def test_build():
    def entry_point(argv):
        res = interp_pyexpat.XML_ErrorString(3)
        os.write(1, rffi.charp2str(res))
        return 0

    t = TranslationContext()
    t.buildannotator().build_types(entry_point, [s_list_of_strings])
    t.buildrtyper().specialize()

    builder = CStandaloneBuilder(t, entry_point, t.config)
    builder.generate_source()
    builder.compile()
    data = builder.cmdexec()
    assert data == pyexpat.ErrorString(3)
Пример #5
0
    def parse(self, input, mediadbStorable=True):
        """ XmlAttrBuilder.parse """

        # prepare builder
        self.mediadbStorable = mediadbStorable
        self.dValueStack = _globals.MyStack()
        self.dTagStack = _globals.MyStack()

        # create parser object
        p = pyexpat.ParserCreate()

        # connect parser object with handler methods
        p.StartElementHandler = self.OnStartElement
        p.EndElementHandler = self.OnEndElement
        p.CharacterDataHandler = self.OnCharacterData
        p.StartCdataSectionHandler = self.OnStartCData
        p.EndCdataSectionHandler = self.OnEndCData
        p.ProcessingInstructionHandler = self.OnProcessingInstruction
        p.CommentHandler = self.OnComment
        p.StartNamespaceDeclHandler = self.OnStartNamespaceDecl
        p.EndNamespaceDeclHandler = self.OnEndNamespaceDecl

        #### parsing ####
        if type(input) is str:
            # input is a string!
            rv = p.Parse(input, 1)
        else:
            # input is a file object!
            while True:

                v = input.read(self.iBufferSize)
                if v == "":
                    rv = 1
                    break

                rv = p.Parse(v, 0)
                if not rv:
                    break

        # raise parser exception
        if not rv:
            raise ParseError(
                '%s at line %s' %
                (pyexpat.ErrorString(p.ErrorCode), p.ErrorLineNumber))

        return self.dValueStack.pop()
Пример #6
0
    def parse(self, input):
        """ XmlBuilder.parse """

        # prepare builder
        self.dTagStack = collections.deque()
        self.dTagStack.append({'tags': []})

        # create parser object
        p = pyexpat.ParserCreate()

        # connect parser object with handler methods
        p.StartElementHandler = self.OnStartElement
        p.EndElementHandler = self.OnEndElement
        p.CharacterDataHandler = self.OnCharacterData
        p.StartCdataSectionHandler = self.OnStartCData
        p.EndCdataSectionHandler = self.OnEndCData
        p.ProcessingInstructionHandler = self.OnProcessingInstruction
        p.CommentHandler = self.OnComment
        p.StartNamespaceDeclHandler = self.OnStartNamespaceDecl
        p.EndNamespaceDeclHandler = self.OnEndNamespaceDecl

        #### parsing ####
        if isinstance(input, bytes):
            # input is a string!
            rv = p.Parse(input, 1)
        else:
            # input is a file object!
            while True:

                v = input.read(self.iBufferSize)
                if len(v) == 0:
                    rv = 1
                    break

                rv = p.Parse(v, 0)
                if not rv:
                    break

        # raise parser exception
        if not rv:
            raise ParseError(
                '%s at line %s' %
                (pyexpat.ErrorString(p.ErrorCode), p.ErrorLineNumber))

        return self.dTagStack.pop()['tags']
Пример #7
0
 def test_ErrorString(self):
     self.assertEqual(expat.ErrorString(1), 'out of memory')
Пример #8
0
data = """<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<?xml-stylesheet href="stylesheet.css"?>
<!-- comment data -->
<!DOCTYPE quotations SYSTEM "quotations.dtd" [
<!ELEMENT root ANY>
<!NOTATION notation SYSTEM "notation.jpeg">
<!ENTITY acirc "&#226;">
<!ENTITY external_entity SYSTEM "entity.file">
<!ENTITY unparsed_entity SYSTEM "entity.file" NDATA notation>
%unparsed_entity;
]>

<root>
<myns:subelement xmlns:myns="http://www.python.org/namespace">
     Contents of subelements
</myns:subelement>
<sub2><![CDATA[contents of CDATA section]]></sub2>
&external_entity;
</root>
"""

try:
    parser.Parse(data, 1)
except pyexpat.error:
    print '** Error', parser.ErrorCode, pyexpat.ErrorString( parser.ErrorCode)
    print '** Line', parser.ErrorLineNumber
    print '** Column', parser.ErrorColumnNumber
    print '** Byte', parser.ErrorByteIndex