[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [xml] False document empty errors while doing SAX2 with ParseChunk
- From: Daniel Veillard <veillard redhat com>
- To: Joachim Zobel <jz-2006 heute-morgen de>
- Cc: xml gnome org
- Subject: Re: [xml] False document empty errors while doing SAX2 with ParseChunk
- Date: Mon, 2 Apr 2007 15:07:08 -0400
On Mon, Apr 02, 2007 at 07:41:07PM +0200, Joachim Zobel wrote:
> Hi.
>
> I set up a parser context rather straightforward
>
> memset(&fctx->handler, 0, sizeof(xmlSAXHandler));
> //xmlSAX2InitDefaultSAXHandler(&fctx->handler, 0);
> /*
> * Set handlers
> */
> #define CALLBACK(fn,hdl) fctx->handler.fn = hdl
> CALLBACK(startDocument, xml2_bucket_create_xml_decl);
> CALLBACK(comment, xml2_bucket_create_comment);
> CALLBACK(startElementNs, xml2_bucket_create_start);
> CALLBACK(endElementNs, xml2_bucket_create_end);
> CALLBACK(ignorableWhitespace, xml2_bucket_create_white);
> CALLBACK(cdataBlock, xml2_bucket_create_cdata);
> CALLBACK(characters, xml2_bucket_create_character);
> CALLBACK(processingInstruction, xml2_bucket_create_proc_instr);
> CALLBACK(warning, xml2_sax_warning);
> CALLBACK(error, xml2_sax_error);
> // mark as SAX2
> fctx->handler.initialized = XML_SAX2_MAGIC;
>
> /* set up the parser */
> fctx->sz_parsed = 0;
>
> xmlParserCtxt *parser = xmlCreatePushParserCtxt(&fctx->handler,
> fctx,NULL,0,NULL);
>
> with fctx of type
>
> typedef struct
> {
> xmlParserCtxt parser;
> ....
>
> When I then do
>
> xmlParserErrors err = xmlParseChunk(&fctx->parser, buf, len, 0);
>
> the first call succeeds and the sax events are generated.
>
> The second call however gives me an error 4 - Document is empty. I know
> from the trace log this is not true.
>
> Any hints what is going wrong (or shall I simply continue searching for
> memory corruption)?
1/ do NOT use SAX unless you really know what you are doing and/or
want to shave microseconds. Use the reader instead
http://xmlsoft.org/xmlreader.html
2/ the code is incomplete, no way I can guess what's going on
e.g. where is fctx->parser initialized ?
3/ I suggest to follow the guidelines
http://xmlsoft.org/bugs.html
try with xmllint --push on your document , verify it work, then
base you code on xmllint.c section where --push is implemented.
that should show how to use the push section, for the
SAX block initialization see the section for --sax option
Daniel
--
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard redhat com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]