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)
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
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
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)
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()
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']
def test_ErrorString(self): self.assertEqual(expat.ErrorString(1), 'out of memory')
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 "â"> <!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