On Fri, Dec 14, 2012 at 11:22:37AM +0100, Alexandre Bique wrote:
> Hi,
> 
> I would like to know if it is possible to use xmlTextReader, but with
> a parseChunk interface?

  Well the two are somehow in opposition:
   - the reader will internally try to get more data while parsing
     assuming a synchronous input
   - the chunk interface assumes the parser will just stop and
     give back the execution control to the caller once it needs
     more data.

> Actually I do:
> 
> // I removed the checks to simplify the code
> buffer = xmlAllocParserInputBuffer(XML_CHAR_ENCODING_NONE);
> reader = xmlNewTextReader(buffer, url);
> 
> void data_received(const char *data, size_t len)
> {
>         xmlParserInputBufferPush(buffer, len, data);
>         while (xmlTextReaderRead(reader) == 1)

   xmlTextReaderRead() may return 0 or and error code here
if there is not enough data to finish parsing

>               parse_node(reader);
> }
> 
> This works but I noticed that the last chunk may not be parsed.
> How can I make the reader to consume all the remaining data?

  Honnestly I don't know how to solve that simply. The natural way
to do this would be to parse in a separate thread, create a
reader for custom I/O and have the I/O read routine block if there
is no more data to be read, then the main thread would unblock it
when new data is available. This requires specialized I/O routines,
threading and synchronization, so not simple.

  The core problem is that xmlTextReaderRead() can either return
1 for success, 0 if parsing is finished and -1 in case of error.
There is no provision in the API to say "I need more data", and
basically missing data would be reported as a parsing error
(with missing closed tags for example).

  The programming model of the reader is way simpler, but it assumes
a synchronous input.

Daniel

-- 
Daniel Veillard      | Open Source and Standards, Red Hat
[email protected]  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | virtualization library  http://libvirt.org/
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to