On Wed, Aug 20, 2014 at 07:04:06PM +0200, Iñigo Martínez wrote:
> Hi:
> 
> I'm working with a protocol based on XML, something like:
> 
> <Command Timestamp="0" ReceptionTimeStamp="0" Sender="P1"
> Receiver="P2"><GetData/></Command>
> 
> I can successfully parse these messages using xmlReadMemory and
> navigating through the tree. When trying to create my own messages I
> can create them successfully this way:
> 
> doc = xmlNewDoc(NULL);
> node = xmlNewNode(NULL, BAD_CAST "Command");
> xmlDocSetRootElement(doc, node);
> 
> xmlNewProp(node, BAD_CAST "Timestamp", BAD_CAST "0");
> xmlNewProp(node, BAD_CAST "ReceptionTimestamp", BAD_CAST "0");
> xmlNewProp(node, BAD_CAST "Sender", BAD_CAST "P1");
> xmlNewProp(node, BAD_CAST "Receiver", BAD_CAST "P2");
> 
> xmlNewChild(node, NULL, BAD_CAST "GetData", NULL);
> 
> The problem comes when trying to get the correspondant string as I get
> the xml version in the output:
> 
> <?xml version="1.0"?><Command Timestamp="0" ReceptionTimeStamp="0"
> Sender="P1" Receiver="P2"><GetData/></Command>
> 
> I have seen some tricks using a xmlTextWriter, but in my case I need
> an string not a file.
> 
> Is there any way to avoid it ?

  Best way is to use the 'new' saving APIs

http://xmlsoft.org/html/libxml-xmlsave.html#xmlSaveToBuffer
with XML_SAVE_NO_DECL in the option

and use
http://xmlsoft.org/html/libxml-xmlsave.html#xmlSaveDoc

if you are piling up such messages on an IO just use anothe xmlSaveTo...
function and Flush to output instead of writing in memory and doing
the I/O separately

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