1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>xmlsave: the XML document serializer</title> 5<meta name="generator" content="Libxml2 devhelp stylesheet"> 6<link rel="start" href="index.html" title="libxml2 Reference Manual"> 7<link rel="up" href="general.html" title="API"> 8<link rel="stylesheet" href="style.css" type="text/css"> 9<link rel="chapter" href="general.html" title="API"> 10</head> 11<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 12<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> 13<td><a accesskey="p" href="libxml2-xmlregexp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> 14<td><a accesskey="u" href="general.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> 15<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> 16<td><a accesskey="n" href="libxml2-xmlschemas.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> 17<th width="100%" align="center">libxml2 Reference Manual</th> 18</tr></table> 19<h2><span class="refentrytitle">xmlsave</span></h2> 20<p>xmlsave - the XML document serializer</p> 21<p>API to save document or subtree of document </p> 22<p>Author(s): Daniel Veillard </p> 23<div class="refsynopsisdiv"> 24<h2>Synopsis</h2> 25<pre class="synopsis">typedef struct _xmlSaveCtxt <a href="#xmlSaveCtxt">xmlSaveCtxt</a>; 26typedef <a href="libxml2-xmlsave.html#xmlSaveCtxt">xmlSaveCtxt</a> * <a href="#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a>; 27typedef enum <a href="#xmlSaveOption">xmlSaveOption</a>; 28int <a href="#xmlSaveClose">xmlSaveClose</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt); 29long <a href="#xmlSaveDoc">xmlSaveDoc</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc); 30int <a href="#xmlSaveFinish">xmlSaveFinish</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt); 31int <a href="#xmlSaveFlush">xmlSaveFlush</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt); 32int <a href="#xmlSaveSetAttrEscape">xmlSaveSetAttrEscape</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escape); 33int <a href="#xmlSaveSetEscape">xmlSaveSetEscape</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escape); 34<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToBuffer">xmlSaveToBuffer</a> (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br> const char * encoding, <br> int options); 35<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToFd">xmlSaveToFd</a> (int fd, <br> const char * encoding, <br> int options); 36<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToFilename">xmlSaveToFilename</a> (const char * filename, <br> const char * encoding, <br> int options); 37<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToIO">xmlSaveToIO</a> (<a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br> <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br> void * ioctx, <br> const char * encoding, <br> int options); 38long <a href="#xmlSaveTree">xmlSaveTree</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur); 39int <a href="#xmlThrDefIndentTreeOutput">xmlThrDefIndentTreeOutput</a> (int v); 40int <a href="#xmlThrDefSaveNoEmptyTags">xmlThrDefSaveNoEmptyTags</a> (int v); 41const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a> (const char * v); 42</pre> 43</div> 44<div class="refsect1" lang="en"><h2>Description</h2></div> 45<div class="refsect1" lang="en"> 46<h2>Details</h2> 47<div class="refsect2" lang="en"> 48<div class="refsect2" lang="en"> 49<h3> 50<a name="xmlSaveCtxt">Structure </a>xmlSaveCtxt</h3> 51<pre class="programlisting">struct _xmlSaveCtxt { 52The content of this structure is not made public by the API. 53} xmlSaveCtxt; 54</pre> 55<p></p> 56</div> 57<hr> 58<div class="refsect2" lang="en"> 59<h3> 60<a name="xmlSaveCtxtPtr">Typedef </a>xmlSaveCtxtPtr</h3> 61<pre class="programlisting"><a href="libxml2-xmlsave.html#xmlSaveCtxt">xmlSaveCtxt</a> * xmlSaveCtxtPtr; 62</pre> 63<p></p> 64</div> 65<hr> 66<div class="refsect2" lang="en"> 67<h3> 68<a name="xmlSaveOption">Enum </a>xmlSaveOption</h3> 69<pre class="programlisting">enum <a href="#xmlSaveOption">xmlSaveOption</a> { 70 <a name="XML_SAVE_FORMAT">XML_SAVE_FORMAT</a> = 1 /* format save output */ 71 <a name="XML_SAVE_NO_DECL">XML_SAVE_NO_DECL</a> = 2 /* drop the xml declaration */ 72 <a name="XML_SAVE_NO_EMPTY">XML_SAVE_NO_EMPTY</a> = 4 /* no empty tags */ 73 <a name="XML_SAVE_NO_XHTML">XML_SAVE_NO_XHTML</a> = 8 /* disable XHTML1 specific rules */ 74 <a name="XML_SAVE_XHTML">XML_SAVE_XHTML</a> = 16 /* force XHTML1 specific rules */ 75 <a name="XML_SAVE_AS_XML">XML_SAVE_AS_XML</a> = 32 /* force XML serialization on HTML doc */ 76 <a name="XML_SAVE_AS_HTML">XML_SAVE_AS_HTML</a> = 64 /* force HTML serialization on XML doc */ 77 <a name="XML_SAVE_WSNONSIG">XML_SAVE_WSNONSIG</a> = 128 /* format with non-significant whitespace */ 78}; 79</pre> 80<p></p> 81</div> 82<hr> 83<div class="refsect2" lang="en"> 84<h3> 85<a name="xmlSaveClose"></a>xmlSaveClose ()</h3> 86<pre class="programlisting">int xmlSaveClose (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)<br> 87</pre> 88<p>Close a document saving context, i.e. make sure that all bytes have been output and free the associated data.</p> 89<div class="variablelist"><table border="0"> 90<col align="left"> 91<tbody> 92<tr> 93<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 94<td>a document saving context</td> 95</tr> 96<tr> 97<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 98<td>the number of byte written or -1 in case of error.</td> 99</tr> 100</tbody> 101</table></div> 102</div> 103<hr> 104<div class="refsect2" lang="en"> 105<h3> 106<a name="xmlSaveDoc"></a>xmlSaveDoc ()</h3> 107<pre class="programlisting">long xmlSaveDoc (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br> 108</pre> 109<p>Save a full document to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead</p> 110<div class="variablelist"><table border="0"> 111<col align="left"> 112<tbody> 113<tr> 114<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 115<td>a document saving context</td> 116</tr> 117<tr> 118<td><span class="term"><i><tt>doc</tt></i>:</span></td> 119<td>a document</td> 120</tr> 121<tr> 122<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 123<td>the number of byte written or -1 in case of error</td> 124</tr> 125</tbody> 126</table></div> 127</div> 128<hr> 129<div class="refsect2" lang="en"> 130<h3> 131<a name="xmlSaveFinish"></a>xmlSaveFinish ()</h3> 132<pre class="programlisting">int xmlSaveFinish (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)<br> 133</pre> 134<p>Close a document saving context, i.e. make sure that all bytes have been output and free the associated data. Available since 2.13.0.</p> 135<div class="variablelist"><table border="0"> 136<col align="left"> 137<tbody> 138<tr> 139<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 140<td>a document saving context</td> 141</tr> 142<tr> 143<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 144<td>an <a href="libxml2-xmlerror.html#xmlParserErrors">xmlParserErrors</a> code.</td> 145</tr> 146</tbody> 147</table></div> 148</div> 149<hr> 150<div class="refsect2" lang="en"> 151<h3> 152<a name="xmlSaveFlush"></a>xmlSaveFlush ()</h3> 153<pre class="programlisting">int xmlSaveFlush (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)<br> 154</pre> 155<p>Flush a document saving context, i.e. make sure that all bytes have been output.</p> 156<div class="variablelist"><table border="0"> 157<col align="left"> 158<tbody> 159<tr> 160<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 161<td>a document saving context</td> 162</tr> 163<tr> 164<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 165<td>the number of byte written or -1 in case of error.</td> 166</tr> 167</tbody> 168</table></div> 169</div> 170<hr> 171<div class="refsect2" lang="en"> 172<h3> 173<a name="xmlSaveSetAttrEscape"></a>xmlSaveSetAttrEscape ()</h3> 174<pre class="programlisting">int xmlSaveSetAttrEscape (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escape)<br> 175</pre> 176<p>Set a custom escaping function to be used for text in <a href="libxml2-SAX.html#attribute">attribute</a> content</p> 177<div class="variablelist"><table border="0"> 178<col align="left"> 179<tbody> 180<tr> 181<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 182<td>a document saving context</td> 183</tr> 184<tr> 185<td><span class="term"><i><tt>escape</tt></i>:</span></td> 186<td>the escaping function</td> 187</tr> 188<tr> 189<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 190<td>0 if successful or -1 in case of error.</td> 191</tr> 192</tbody> 193</table></div> 194</div> 195<hr> 196<div class="refsect2" lang="en"> 197<h3> 198<a name="xmlSaveSetEscape"></a>xmlSaveSetEscape ()</h3> 199<pre class="programlisting">int xmlSaveSetEscape (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escape)<br> 200</pre> 201<p>Set a custom escaping function to be used for text in element content</p> 202<div class="variablelist"><table border="0"> 203<col align="left"> 204<tbody> 205<tr> 206<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 207<td>a document saving context</td> 208</tr> 209<tr> 210<td><span class="term"><i><tt>escape</tt></i>:</span></td> 211<td>the escaping function</td> 212</tr> 213<tr> 214<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 215<td>0 if successful or -1 in case of error.</td> 216</tr> 217</tbody> 218</table></div> 219</div> 220<hr> 221<div class="refsect2" lang="en"> 222<h3> 223<a name="xmlSaveToBuffer"></a>xmlSaveToBuffer ()</h3> 224<pre class="programlisting"><a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToBuffer (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br> const char * encoding, <br> int options)<br> 225</pre> 226<p>Create a document saving context serializing to a buffer with the encoding and the options given</p> 227<div class="variablelist"><table border="0"> 228<col align="left"> 229<tbody> 230<tr> 231<td><span class="term"><i><tt>buffer</tt></i>:</span></td> 232<td>a buffer</td> 233</tr> 234<tr> 235<td><span class="term"><i><tt>encoding</tt></i>:</span></td> 236<td>the encoding name to use or NULL</td> 237</tr> 238<tr> 239<td><span class="term"><i><tt>options</tt></i>:</span></td> 240<td>a set of xmlSaveOptions</td> 241</tr> 242<tr> 243<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 244<td>a new serialization context or NULL in case of error.</td> 245</tr> 246</tbody> 247</table></div> 248</div> 249<hr> 250<div class="refsect2" lang="en"> 251<h3> 252<a name="xmlSaveToFd"></a>xmlSaveToFd ()</h3> 253<pre class="programlisting"><a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToFd (int fd, <br> const char * encoding, <br> int options)<br> 254</pre> 255<p>Create a document saving context serializing to a file descriptor with the encoding and the options given.</p> 256<div class="variablelist"><table border="0"> 257<col align="left"> 258<tbody> 259<tr> 260<td><span class="term"><i><tt>fd</tt></i>:</span></td> 261<td>a file descriptor number</td> 262</tr> 263<tr> 264<td><span class="term"><i><tt>encoding</tt></i>:</span></td> 265<td>the encoding name to use or NULL</td> 266</tr> 267<tr> 268<td><span class="term"><i><tt>options</tt></i>:</span></td> 269<td>a set of xmlSaveOptions</td> 270</tr> 271<tr> 272<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 273<td>a new serialization context or NULL in case of error.</td> 274</tr> 275</tbody> 276</table></div> 277</div> 278<hr> 279<div class="refsect2" lang="en"> 280<h3> 281<a name="xmlSaveToFilename"></a>xmlSaveToFilename ()</h3> 282<pre class="programlisting"><a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToFilename (const char * filename, <br> const char * encoding, <br> int options)<br> 283</pre> 284<p>Create a document saving context serializing to a filename or possibly to an URL (but this is less reliable) with the encoding and the options given.</p> 285<div class="variablelist"><table border="0"> 286<col align="left"> 287<tbody> 288<tr> 289<td><span class="term"><i><tt>filename</tt></i>:</span></td> 290<td>a file name or an URL</td> 291</tr> 292<tr> 293<td><span class="term"><i><tt>encoding</tt></i>:</span></td> 294<td>the encoding name to use or NULL</td> 295</tr> 296<tr> 297<td><span class="term"><i><tt>options</tt></i>:</span></td> 298<td>a set of xmlSaveOptions</td> 299</tr> 300<tr> 301<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 302<td>a new serialization context or NULL in case of error.</td> 303</tr> 304</tbody> 305</table></div> 306</div> 307<hr> 308<div class="refsect2" lang="en"> 309<h3> 310<a name="xmlSaveToIO"></a>xmlSaveToIO ()</h3> 311<pre class="programlisting"><a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToIO (<a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br> <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br> void * ioctx, <br> const char * encoding, <br> int options)<br> 312</pre> 313<p>Create a document saving context serializing to a file descriptor with the encoding and the options given</p> 314<div class="variablelist"><table border="0"> 315<col align="left"> 316<tbody> 317<tr> 318<td><span class="term"><i><tt>iowrite</tt></i>:</span></td> 319<td>an I/O write function</td> 320</tr> 321<tr> 322<td><span class="term"><i><tt>ioclose</tt></i>:</span></td> 323<td>an I/O close function</td> 324</tr> 325<tr> 326<td><span class="term"><i><tt>ioctx</tt></i>:</span></td> 327<td>an I/O handler</td> 328</tr> 329<tr> 330<td><span class="term"><i><tt>encoding</tt></i>:</span></td> 331<td>the encoding name to use or NULL</td> 332</tr> 333<tr> 334<td><span class="term"><i><tt>options</tt></i>:</span></td> 335<td>a set of xmlSaveOptions</td> 336</tr> 337<tr> 338<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 339<td>a new serialization context or NULL in case of error.</td> 340</tr> 341</tbody> 342</table></div> 343</div> 344<hr> 345<div class="refsect2" lang="en"> 346<h3> 347<a name="xmlSaveTree"></a>xmlSaveTree ()</h3> 348<pre class="programlisting">long xmlSaveTree (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br> 349</pre> 350<p>Save a subtree starting at the node parameter to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead</p> 351<div class="variablelist"><table border="0"> 352<col align="left"> 353<tbody> 354<tr> 355<td><span class="term"><i><tt>ctxt</tt></i>:</span></td> 356<td>a document saving context</td> 357</tr> 358<tr> 359<td><span class="term"><i><tt>cur</tt></i>:</span></td> 360<td>the top node of the subtree to save</td> 361</tr> 362<tr> 363<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 364<td>the number of byte written or -1 in case of error</td> 365</tr> 366</tbody> 367</table></div> 368</div> 369<hr> 370<div class="refsect2" lang="en"> 371<h3> 372<a name="xmlThrDefIndentTreeOutput"></a>xmlThrDefIndentTreeOutput ()</h3> 373<pre class="programlisting">int xmlThrDefIndentTreeOutput (int v)<br> 374</pre> 375<p></p> 376<div class="variablelist"><table border="0"> 377<col align="left"> 378<tbody> 379<tr> 380<td><span class="term"><i><tt>v</tt></i>:</span></td> 381<td></td> 382</tr> 383<tr> 384<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 385<td></td> 386</tr> 387</tbody> 388</table></div> 389</div> 390<hr> 391<div class="refsect2" lang="en"> 392<h3> 393<a name="xmlThrDefSaveNoEmptyTags"></a>xmlThrDefSaveNoEmptyTags ()</h3> 394<pre class="programlisting">int xmlThrDefSaveNoEmptyTags (int v)<br> 395</pre> 396<p></p> 397<div class="variablelist"><table border="0"> 398<col align="left"> 399<tbody> 400<tr> 401<td><span class="term"><i><tt>v</tt></i>:</span></td> 402<td></td> 403</tr> 404<tr> 405<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 406<td></td> 407</tr> 408</tbody> 409</table></div> 410</div> 411<hr> 412<div class="refsect2" lang="en"> 413<h3> 414<a name="xmlThrDefTreeIndentString"></a>xmlThrDefTreeIndentString ()</h3> 415<pre class="programlisting">const char * xmlThrDefTreeIndentString (const char * v)<br> 416</pre> 417<p></p> 418<div class="variablelist"><table border="0"> 419<col align="left"> 420<tbody> 421<tr> 422<td><span class="term"><i><tt>v</tt></i>:</span></td> 423<td></td> 424</tr> 425<tr> 426<td><span class="term"><i><tt>Returns</tt></i>:</span></td> 427<td></td> 428</tr> 429</tbody> 430</table></div> 431</div> 432<hr> 433</div> 434</div> 435</body> 436</html> 437