Re: [xml] How to retrieve filename from xmlTextWriter
- From: Zoltán Ördögh (GMail) <csimbi gmail com>
- To: veillard redhat com
- Cc: xml gnome org
- Subject: Re: [xml] How to retrieve filename from xmlTextWriter
- Date: Thu, 14 Mar 2013 22:43:12 -0400
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
<veillard 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
veillard redhat com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]