Hi Daniel,
thank you!

That's clear - unfortunately...
I was hoping it'd be kept handy.
Oh well, it's never that easy... ;-)

Best regards: Zoltán Ördögh


On Thu, Mar 14, 2013 at 10:22 PM, Daniel Veillard <veill...@redhat.com>wrote:

> On Thu, Mar 14, 2013 at 07:12:34PM -0400, Zoltán Ördögh (GMail) wrote:
> > Hi all,
> > I am exporting data from binary format to XML.
> > Most of the data fits nicely into the XML document, it looks nice, tidy
> and
> > easy to read.
> >
> > However, there are a few large blocks of data. For example, 4k floats is
> > not very useful as a BASE64 encoded string, and having 4k elements is not
> > very useful, neither.
> > So, I thought I'd export these blocks 'as-is', into binary format, as a
> > separate file, right next to the XML file and store the location on the
> > binary file into the XML instead.
> >
> > To achieve this, I'd need to find out the URI of the XML file being
> written
> > (so I can change the file extension from XML to BIN and write the file to
> > the same place where the XML is).
> > Unfortunately, the xmlTextWriter does not have any members that would
> give
> > me the URI.
> >
> > Is there any legitimate way to figure it out - one that I must have
> missed?
> >
> > The thing is, I would not want to update all classes involved just to
> pass
> > down the URI of the XML document; it would be far better go get the
> > filename on the spot, using the xmlTextWriterPtr that's already passed
> down.
>
>   But you can use a writer to a file descriptor, or any method of I/O
> you want to build.
>   xmlNewTextWriterFilename()
> calls
>   __xmlOutputBufferCreateFilename(const char *URI,...
> and there we use the I/O layer to create a context used by the
> I/O layer to push data, but that context is completely opaque
> and at the xmlOutputBuffer level we don't keep informations like
> the URI
>
> http://xmlsoft.org/html/libxml-tree.html#xmlOutputBuffer
> -------------------------------
> struct _xmlOutputBuffer {
>     void*                   context;
>     xmlOutputWriteCallback  writecallback;
>     xmlOutputCloseCallback  closecallback;
>
>     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
>
>     xmlBufPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
>     xmlBufPtr conv;      /* if encoder != NULL buffer for output */
>     int written;            /* total number of byte written */
>     int error;
> };
> -------------------------------
>
>   So as-is, I'm sorry that's not possible, you will have somehow
> to keep the data around, as libxml2 doesn't store it there.
> Another way would be to design and register your own I/O layer for
> file access and store that filename as part of the returned context
> used by your own I/O routines.
>
> Daniel
>
> --
> Daniel Veillard      | Open Source and Standards, Red Hat
> veill...@redhat.com  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
> http://veillard.com/ | virtualization library  http://libvirt.org/
>
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to