xref: /aosp_15_r20/external/libxml2/example/testWriter.c (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker /**
2*7c568831SAndroid Build Coastguard Worker  * section: xmlWriter
3*7c568831SAndroid Build Coastguard Worker  * synopsis: use various APIs for the xmlWriter
4*7c568831SAndroid Build Coastguard Worker  * purpose: tests a number of APIs for the xmlWriter, especially
5*7c568831SAndroid Build Coastguard Worker  *          the various methods to write to a filename, to a memory
6*7c568831SAndroid Build Coastguard Worker  *          buffer, to a new document, or to a subtree. It shows how to
7*7c568831SAndroid Build Coastguard Worker  *          do encoding string conversions too. The resulting
8*7c568831SAndroid Build Coastguard Worker  *          documents are then serialized.
9*7c568831SAndroid Build Coastguard Worker  * usage: testWriter
10*7c568831SAndroid Build Coastguard Worker  * test: testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done
11*7c568831SAndroid Build Coastguard Worker  * author: Alfred Mickautsch
12*7c568831SAndroid Build Coastguard Worker  * copy: see Copyright for the status of this software.
13*7c568831SAndroid Build Coastguard Worker  */
14*7c568831SAndroid Build Coastguard Worker #include <stdio.h>
15*7c568831SAndroid Build Coastguard Worker #include <string.h>
16*7c568831SAndroid Build Coastguard Worker #include <libxml/encoding.h>
17*7c568831SAndroid Build Coastguard Worker #include <libxml/xmlwriter.h>
18*7c568831SAndroid Build Coastguard Worker #include <libxml/parser.h>
19*7c568831SAndroid Build Coastguard Worker 
20*7c568831SAndroid Build Coastguard Worker #ifndef _WIN32
21*7c568831SAndroid Build Coastguard Worker #include <unistd.h>
22*7c568831SAndroid Build Coastguard Worker #endif
23*7c568831SAndroid Build Coastguard Worker 
24*7c568831SAndroid Build Coastguard Worker #if defined(LIBXML_WRITER_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
25*7c568831SAndroid Build Coastguard Worker 
26*7c568831SAndroid Build Coastguard Worker #define MY_ENCODING "ISO-8859-1"
27*7c568831SAndroid Build Coastguard Worker 
28*7c568831SAndroid Build Coastguard Worker void testXmlwriterFilename(const char *uri);
29*7c568831SAndroid Build Coastguard Worker void testXmlwriterMemory(void);
30*7c568831SAndroid Build Coastguard Worker void testXmlwriterDoc(void);
31*7c568831SAndroid Build Coastguard Worker void testXmlwriterTree(void);
32*7c568831SAndroid Build Coastguard Worker 
33*7c568831SAndroid Build Coastguard Worker int
main(void)34*7c568831SAndroid Build Coastguard Worker main(void)
35*7c568831SAndroid Build Coastguard Worker {
36*7c568831SAndroid Build Coastguard Worker     /*
37*7c568831SAndroid Build Coastguard Worker      * this initialize the library and check potential ABI mismatches
38*7c568831SAndroid Build Coastguard Worker      * between the version it was compiled for and the actual shared
39*7c568831SAndroid Build Coastguard Worker      * library used.
40*7c568831SAndroid Build Coastguard Worker      */
41*7c568831SAndroid Build Coastguard Worker     LIBXML_TEST_VERSION
42*7c568831SAndroid Build Coastguard Worker 
43*7c568831SAndroid Build Coastguard Worker     /* first, the file version */
44*7c568831SAndroid Build Coastguard Worker     testXmlwriterFilename("writer1.tmp");
45*7c568831SAndroid Build Coastguard Worker     unlink("writer1.tmp");
46*7c568831SAndroid Build Coastguard Worker 
47*7c568831SAndroid Build Coastguard Worker     /* next, the memory version */
48*7c568831SAndroid Build Coastguard Worker     testXmlwriterMemory();
49*7c568831SAndroid Build Coastguard Worker 
50*7c568831SAndroid Build Coastguard Worker     /* next, the DOM version */
51*7c568831SAndroid Build Coastguard Worker     testXmlwriterDoc();
52*7c568831SAndroid Build Coastguard Worker 
53*7c568831SAndroid Build Coastguard Worker     /* next, the tree version */
54*7c568831SAndroid Build Coastguard Worker     testXmlwriterTree();
55*7c568831SAndroid Build Coastguard Worker 
56*7c568831SAndroid Build Coastguard Worker     return 0;
57*7c568831SAndroid Build Coastguard Worker }
58*7c568831SAndroid Build Coastguard Worker 
59*7c568831SAndroid Build Coastguard Worker /**
60*7c568831SAndroid Build Coastguard Worker  * testXmlwriterFilename:
61*7c568831SAndroid Build Coastguard Worker  * @uri: the output URI
62*7c568831SAndroid Build Coastguard Worker  *
63*7c568831SAndroid Build Coastguard Worker  * test the xmlWriter interface when writing to a new file
64*7c568831SAndroid Build Coastguard Worker  */
65*7c568831SAndroid Build Coastguard Worker void
testXmlwriterFilename(const char * uri)66*7c568831SAndroid Build Coastguard Worker testXmlwriterFilename(const char *uri)
67*7c568831SAndroid Build Coastguard Worker {
68*7c568831SAndroid Build Coastguard Worker     int rc;
69*7c568831SAndroid Build Coastguard Worker     xmlTextWriterPtr writer;
70*7c568831SAndroid Build Coastguard Worker 
71*7c568831SAndroid Build Coastguard Worker     /* Create a new XmlWriter for uri, with no compression. */
72*7c568831SAndroid Build Coastguard Worker     writer = xmlNewTextWriterFilename(uri, 0);
73*7c568831SAndroid Build Coastguard Worker     if (writer == NULL) {
74*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterFilename: Error creating the xml writer\n");
75*7c568831SAndroid Build Coastguard Worker         return;
76*7c568831SAndroid Build Coastguard Worker     }
77*7c568831SAndroid Build Coastguard Worker 
78*7c568831SAndroid Build Coastguard Worker     /* Start the document with the xml default for the version,
79*7c568831SAndroid Build Coastguard Worker      * encoding ISO 8859-1 and the default for the standalone
80*7c568831SAndroid Build Coastguard Worker      * declaration. */
81*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
82*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
83*7c568831SAndroid Build Coastguard Worker         printf
84*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartDocument\n");
85*7c568831SAndroid Build Coastguard Worker         return;
86*7c568831SAndroid Build Coastguard Worker     }
87*7c568831SAndroid Build Coastguard Worker 
88*7c568831SAndroid Build Coastguard Worker     /* Start an element named "EXAMPLE". Since this is the first
89*7c568831SAndroid Build Coastguard Worker      * element, this will be the root element of the document. */
90*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
91*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
92*7c568831SAndroid Build Coastguard Worker         printf
93*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
94*7c568831SAndroid Build Coastguard Worker         return;
95*7c568831SAndroid Build Coastguard Worker     }
96*7c568831SAndroid Build Coastguard Worker 
97*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is a comment");
98*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
99*7c568831SAndroid Build Coastguard Worker         printf
100*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteComment\n");
101*7c568831SAndroid Build Coastguard Worker         return;
102*7c568831SAndroid Build Coastguard Worker     }
103*7c568831SAndroid Build Coastguard Worker 
104*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ORDER" as child of EXAMPLE. */
105*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
106*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
107*7c568831SAndroid Build Coastguard Worker         printf
108*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
109*7c568831SAndroid Build Coastguard Worker         return;
110*7c568831SAndroid Build Coastguard Worker     }
111*7c568831SAndroid Build Coastguard Worker 
112*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "version" and value "1.0" to ORDER. */
113*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
114*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "1.0");
115*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
116*7c568831SAndroid Build Coastguard Worker         printf
117*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
118*7c568831SAndroid Build Coastguard Worker         return;
119*7c568831SAndroid Build Coastguard Worker     }
120*7c568831SAndroid Build Coastguard Worker 
121*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
122*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
123*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "de");
124*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
125*7c568831SAndroid Build Coastguard Worker         printf
126*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
127*7c568831SAndroid Build Coastguard Worker         return;
128*7c568831SAndroid Build Coastguard Worker     }
129*7c568831SAndroid Build Coastguard Worker 
130*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of ORDER */
131*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is another comment");
132*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
133*7c568831SAndroid Build Coastguard Worker         printf
134*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatComment\n");
135*7c568831SAndroid Build Coastguard Worker         return;
136*7c568831SAndroid Build Coastguard Worker     }
137*7c568831SAndroid Build Coastguard Worker 
138*7c568831SAndroid Build Coastguard Worker     /* Start an element named "HEADER" as child of ORDER. */
139*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
140*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
141*7c568831SAndroid Build Coastguard Worker         printf
142*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
143*7c568831SAndroid Build Coastguard Worker         return;
144*7c568831SAndroid Build Coastguard Worker     }
145*7c568831SAndroid Build Coastguard Worker 
146*7c568831SAndroid Build Coastguard Worker     /* Write an element named "X_ORDER_ID" as child of HEADER. */
147*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
148*7c568831SAndroid Build Coastguard Worker                                          "%010d", 53535);
149*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
150*7c568831SAndroid Build Coastguard Worker         printf
151*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
152*7c568831SAndroid Build Coastguard Worker         return;
153*7c568831SAndroid Build Coastguard Worker     }
154*7c568831SAndroid Build Coastguard Worker 
155*7c568831SAndroid Build Coastguard Worker     /* Write an element named "CUSTOMER_ID" as child of HEADER. */
156*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
157*7c568831SAndroid Build Coastguard Worker                                          "%d", 1010);
158*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
159*7c568831SAndroid Build Coastguard Worker         printf
160*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
161*7c568831SAndroid Build Coastguard Worker         return;
162*7c568831SAndroid Build Coastguard Worker     }
163*7c568831SAndroid Build Coastguard Worker 
164*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_1" as child of HEADER. */
165*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1",
166*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Mueller");
167*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
168*7c568831SAndroid Build Coastguard Worker         printf
169*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
170*7c568831SAndroid Build Coastguard Worker         return;
171*7c568831SAndroid Build Coastguard Worker     }
172*7c568831SAndroid Build Coastguard Worker 
173*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_2" as child of HEADER. */
174*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2",
175*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Joerg");
176*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
177*7c568831SAndroid Build Coastguard Worker         printf
178*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
179*7c568831SAndroid Build Coastguard Worker         return;
180*7c568831SAndroid Build Coastguard Worker     }
181*7c568831SAndroid Build Coastguard Worker 
182*7c568831SAndroid Build Coastguard Worker     /* Close the element named HEADER. */
183*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
184*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
185*7c568831SAndroid Build Coastguard Worker         printf
186*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
187*7c568831SAndroid Build Coastguard Worker         return;
188*7c568831SAndroid Build Coastguard Worker     }
189*7c568831SAndroid Build Coastguard Worker 
190*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRIES" as child of ORDER. */
191*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
192*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
193*7c568831SAndroid Build Coastguard Worker         printf
194*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
195*7c568831SAndroid Build Coastguard Worker         return;
196*7c568831SAndroid Build Coastguard Worker     }
197*7c568831SAndroid Build Coastguard Worker 
198*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
199*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
200*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
201*7c568831SAndroid Build Coastguard Worker         printf
202*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
203*7c568831SAndroid Build Coastguard Worker         return;
204*7c568831SAndroid Build Coastguard Worker     }
205*7c568831SAndroid Build Coastguard Worker 
206*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
207*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
208*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test>");
209*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
210*7c568831SAndroid Build Coastguard Worker         printf
211*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
212*7c568831SAndroid Build Coastguard Worker         return;
213*7c568831SAndroid Build Coastguard Worker     }
214*7c568831SAndroid Build Coastguard Worker 
215*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
216*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
217*7c568831SAndroid Build Coastguard Worker                                          10);
218*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
219*7c568831SAndroid Build Coastguard Worker         printf
220*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
221*7c568831SAndroid Build Coastguard Worker         return;
222*7c568831SAndroid Build Coastguard Worker     }
223*7c568831SAndroid Build Coastguard Worker 
224*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
225*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
226*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
227*7c568831SAndroid Build Coastguard Worker         printf
228*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
229*7c568831SAndroid Build Coastguard Worker         return;
230*7c568831SAndroid Build Coastguard Worker     }
231*7c568831SAndroid Build Coastguard Worker 
232*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
233*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
234*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
235*7c568831SAndroid Build Coastguard Worker         printf
236*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
237*7c568831SAndroid Build Coastguard Worker         return;
238*7c568831SAndroid Build Coastguard Worker     }
239*7c568831SAndroid Build Coastguard Worker 
240*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
241*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
242*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test 2>");
243*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
244*7c568831SAndroid Build Coastguard Worker         printf
245*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
246*7c568831SAndroid Build Coastguard Worker         return;
247*7c568831SAndroid Build Coastguard Worker     }
248*7c568831SAndroid Build Coastguard Worker 
249*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
250*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
251*7c568831SAndroid Build Coastguard Worker                                          20);
252*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
253*7c568831SAndroid Build Coastguard Worker         printf
254*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
255*7c568831SAndroid Build Coastguard Worker         return;
256*7c568831SAndroid Build Coastguard Worker     }
257*7c568831SAndroid Build Coastguard Worker 
258*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
259*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
260*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
261*7c568831SAndroid Build Coastguard Worker         printf
262*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
263*7c568831SAndroid Build Coastguard Worker         return;
264*7c568831SAndroid Build Coastguard Worker     }
265*7c568831SAndroid Build Coastguard Worker 
266*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRIES. */
267*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
268*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
269*7c568831SAndroid Build Coastguard Worker         printf
270*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
271*7c568831SAndroid Build Coastguard Worker         return;
272*7c568831SAndroid Build Coastguard Worker     }
273*7c568831SAndroid Build Coastguard Worker 
274*7c568831SAndroid Build Coastguard Worker     /* Start an element named "FOOTER" as child of ORDER. */
275*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
276*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
277*7c568831SAndroid Build Coastguard Worker         printf
278*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
279*7c568831SAndroid Build Coastguard Worker         return;
280*7c568831SAndroid Build Coastguard Worker     }
281*7c568831SAndroid Build Coastguard Worker 
282*7c568831SAndroid Build Coastguard Worker     /* Write an element named "TEXT" as child of FOOTER. */
283*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
284*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "This is a text.");
285*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
286*7c568831SAndroid Build Coastguard Worker         printf
287*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
288*7c568831SAndroid Build Coastguard Worker         return;
289*7c568831SAndroid Build Coastguard Worker     }
290*7c568831SAndroid Build Coastguard Worker 
291*7c568831SAndroid Build Coastguard Worker     /* Close the element named FOOTER. */
292*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
293*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
294*7c568831SAndroid Build Coastguard Worker         printf
295*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
296*7c568831SAndroid Build Coastguard Worker         return;
297*7c568831SAndroid Build Coastguard Worker     }
298*7c568831SAndroid Build Coastguard Worker 
299*7c568831SAndroid Build Coastguard Worker     /* Here we could close the elements ORDER and EXAMPLE using the
300*7c568831SAndroid Build Coastguard Worker      * function xmlTextWriterEndElement, but since we do not want to
301*7c568831SAndroid Build Coastguard Worker      * write any other elements, we simply call xmlTextWriterEndDocument,
302*7c568831SAndroid Build Coastguard Worker      * which will do all the work. */
303*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndDocument(writer);
304*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
305*7c568831SAndroid Build Coastguard Worker         printf
306*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterFilename: Error at xmlTextWriterEndDocument\n");
307*7c568831SAndroid Build Coastguard Worker         return;
308*7c568831SAndroid Build Coastguard Worker     }
309*7c568831SAndroid Build Coastguard Worker 
310*7c568831SAndroid Build Coastguard Worker     xmlFreeTextWriter(writer);
311*7c568831SAndroid Build Coastguard Worker }
312*7c568831SAndroid Build Coastguard Worker 
313*7c568831SAndroid Build Coastguard Worker /**
314*7c568831SAndroid Build Coastguard Worker  * testXmlwriterMemory:
315*7c568831SAndroid Build Coastguard Worker  * @file: the output file
316*7c568831SAndroid Build Coastguard Worker  *
317*7c568831SAndroid Build Coastguard Worker  * test the xmlWriter interface when writing to memory
318*7c568831SAndroid Build Coastguard Worker  */
319*7c568831SAndroid Build Coastguard Worker void
testXmlwriterMemory(void)320*7c568831SAndroid Build Coastguard Worker testXmlwriterMemory(void)
321*7c568831SAndroid Build Coastguard Worker {
322*7c568831SAndroid Build Coastguard Worker     int rc;
323*7c568831SAndroid Build Coastguard Worker     xmlTextWriterPtr writer;
324*7c568831SAndroid Build Coastguard Worker     xmlBufferPtr buf;
325*7c568831SAndroid Build Coastguard Worker 
326*7c568831SAndroid Build Coastguard Worker     /* Create a new XML buffer, to which the XML document will be
327*7c568831SAndroid Build Coastguard Worker      * written */
328*7c568831SAndroid Build Coastguard Worker     buf = xmlBufferCreate();
329*7c568831SAndroid Build Coastguard Worker     if (buf == NULL) {
330*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error creating the xml buffer\n");
331*7c568831SAndroid Build Coastguard Worker         return;
332*7c568831SAndroid Build Coastguard Worker     }
333*7c568831SAndroid Build Coastguard Worker 
334*7c568831SAndroid Build Coastguard Worker     /* Create a new XmlWriter for memory, with no compression.
335*7c568831SAndroid Build Coastguard Worker      * Remark: there is no compression for this kind of xmlTextWriter */
336*7c568831SAndroid Build Coastguard Worker     writer = xmlNewTextWriterMemory(buf, 0);
337*7c568831SAndroid Build Coastguard Worker     if (writer == NULL) {
338*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error creating the xml writer\n");
339*7c568831SAndroid Build Coastguard Worker         return;
340*7c568831SAndroid Build Coastguard Worker     }
341*7c568831SAndroid Build Coastguard Worker 
342*7c568831SAndroid Build Coastguard Worker     /* Start the document with the xml default for the version,
343*7c568831SAndroid Build Coastguard Worker      * encoding ISO 8859-1 and the default for the standalone
344*7c568831SAndroid Build Coastguard Worker      * declaration. */
345*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
346*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
347*7c568831SAndroid Build Coastguard Worker         printf
348*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartDocument\n");
349*7c568831SAndroid Build Coastguard Worker         return;
350*7c568831SAndroid Build Coastguard Worker     }
351*7c568831SAndroid Build Coastguard Worker 
352*7c568831SAndroid Build Coastguard Worker     /* Start an element named "EXAMPLE". Since this is the first
353*7c568831SAndroid Build Coastguard Worker      * element, this will be the root element of the document. */
354*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
355*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
356*7c568831SAndroid Build Coastguard Worker         printf
357*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
358*7c568831SAndroid Build Coastguard Worker         return;
359*7c568831SAndroid Build Coastguard Worker     }
360*7c568831SAndroid Build Coastguard Worker 
361*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of EXAMPLE. */
362*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is a comment");
363*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
364*7c568831SAndroid Build Coastguard Worker         printf
365*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteComment\n");
366*7c568831SAndroid Build Coastguard Worker         return;
367*7c568831SAndroid Build Coastguard Worker     }
368*7c568831SAndroid Build Coastguard Worker 
369*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ORDER" as child of EXAMPLE. */
370*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
371*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
372*7c568831SAndroid Build Coastguard Worker         printf
373*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
374*7c568831SAndroid Build Coastguard Worker         return;
375*7c568831SAndroid Build Coastguard Worker     }
376*7c568831SAndroid Build Coastguard Worker 
377*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "version" and value "1.0" to ORDER. */
378*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
379*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "1.0");
380*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
381*7c568831SAndroid Build Coastguard Worker         printf
382*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
383*7c568831SAndroid Build Coastguard Worker         return;
384*7c568831SAndroid Build Coastguard Worker     }
385*7c568831SAndroid Build Coastguard Worker 
386*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
387*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
388*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "de");
389*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
390*7c568831SAndroid Build Coastguard Worker         printf
391*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
392*7c568831SAndroid Build Coastguard Worker         return;
393*7c568831SAndroid Build Coastguard Worker     }
394*7c568831SAndroid Build Coastguard Worker 
395*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of ORDER */
396*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is another comment");
397*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
398*7c568831SAndroid Build Coastguard Worker         printf
399*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatComment\n");
400*7c568831SAndroid Build Coastguard Worker         return;
401*7c568831SAndroid Build Coastguard Worker     }
402*7c568831SAndroid Build Coastguard Worker 
403*7c568831SAndroid Build Coastguard Worker     /* Start an element named "HEADER" as child of ORDER. */
404*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
405*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
406*7c568831SAndroid Build Coastguard Worker         printf
407*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
408*7c568831SAndroid Build Coastguard Worker         return;
409*7c568831SAndroid Build Coastguard Worker     }
410*7c568831SAndroid Build Coastguard Worker 
411*7c568831SAndroid Build Coastguard Worker     /* Write an element named "X_ORDER_ID" as child of HEADER. */
412*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
413*7c568831SAndroid Build Coastguard Worker                                          "%010d", 53535);
414*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
415*7c568831SAndroid Build Coastguard Worker         printf
416*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
417*7c568831SAndroid Build Coastguard Worker         return;
418*7c568831SAndroid Build Coastguard Worker     }
419*7c568831SAndroid Build Coastguard Worker 
420*7c568831SAndroid Build Coastguard Worker     /* Write an element named "CUSTOMER_ID" as child of HEADER. */
421*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
422*7c568831SAndroid Build Coastguard Worker                                          "%d", 1010);
423*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
424*7c568831SAndroid Build Coastguard Worker         printf
425*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
426*7c568831SAndroid Build Coastguard Worker         return;
427*7c568831SAndroid Build Coastguard Worker     }
428*7c568831SAndroid Build Coastguard Worker 
429*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_1" as child of HEADER. */
430*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1",
431*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Mueller");
432*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
433*7c568831SAndroid Build Coastguard Worker         printf
434*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
435*7c568831SAndroid Build Coastguard Worker         return;
436*7c568831SAndroid Build Coastguard Worker     }
437*7c568831SAndroid Build Coastguard Worker 
438*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_2" as child of HEADER. */
439*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2",
440*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Joerg");
441*7c568831SAndroid Build Coastguard Worker 
442*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
443*7c568831SAndroid Build Coastguard Worker         printf
444*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
445*7c568831SAndroid Build Coastguard Worker         return;
446*7c568831SAndroid Build Coastguard Worker     }
447*7c568831SAndroid Build Coastguard Worker 
448*7c568831SAndroid Build Coastguard Worker     /* Close the element named HEADER. */
449*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
450*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
451*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
452*7c568831SAndroid Build Coastguard Worker         return;
453*7c568831SAndroid Build Coastguard Worker     }
454*7c568831SAndroid Build Coastguard Worker 
455*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRIES" as child of ORDER. */
456*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
457*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
458*7c568831SAndroid Build Coastguard Worker         printf
459*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
460*7c568831SAndroid Build Coastguard Worker         return;
461*7c568831SAndroid Build Coastguard Worker     }
462*7c568831SAndroid Build Coastguard Worker 
463*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
464*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
465*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
466*7c568831SAndroid Build Coastguard Worker         printf
467*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
468*7c568831SAndroid Build Coastguard Worker         return;
469*7c568831SAndroid Build Coastguard Worker     }
470*7c568831SAndroid Build Coastguard Worker 
471*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
472*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
473*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test>");
474*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
475*7c568831SAndroid Build Coastguard Worker         printf
476*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
477*7c568831SAndroid Build Coastguard Worker         return;
478*7c568831SAndroid Build Coastguard Worker     }
479*7c568831SAndroid Build Coastguard Worker 
480*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
481*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
482*7c568831SAndroid Build Coastguard Worker                                          10);
483*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
484*7c568831SAndroid Build Coastguard Worker         printf
485*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
486*7c568831SAndroid Build Coastguard Worker         return;
487*7c568831SAndroid Build Coastguard Worker     }
488*7c568831SAndroid Build Coastguard Worker 
489*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
490*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
491*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
492*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
493*7c568831SAndroid Build Coastguard Worker         return;
494*7c568831SAndroid Build Coastguard Worker     }
495*7c568831SAndroid Build Coastguard Worker 
496*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
497*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
498*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
499*7c568831SAndroid Build Coastguard Worker         printf
500*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
501*7c568831SAndroid Build Coastguard Worker         return;
502*7c568831SAndroid Build Coastguard Worker     }
503*7c568831SAndroid Build Coastguard Worker 
504*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
505*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
506*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test 2>");
507*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
508*7c568831SAndroid Build Coastguard Worker         printf
509*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
510*7c568831SAndroid Build Coastguard Worker         return;
511*7c568831SAndroid Build Coastguard Worker     }
512*7c568831SAndroid Build Coastguard Worker 
513*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
514*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
515*7c568831SAndroid Build Coastguard Worker                                          20);
516*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
517*7c568831SAndroid Build Coastguard Worker         printf
518*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
519*7c568831SAndroid Build Coastguard Worker         return;
520*7c568831SAndroid Build Coastguard Worker     }
521*7c568831SAndroid Build Coastguard Worker 
522*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
523*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
524*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
525*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
526*7c568831SAndroid Build Coastguard Worker         return;
527*7c568831SAndroid Build Coastguard Worker     }
528*7c568831SAndroid Build Coastguard Worker 
529*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRIES. */
530*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
531*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
532*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
533*7c568831SAndroid Build Coastguard Worker         return;
534*7c568831SAndroid Build Coastguard Worker     }
535*7c568831SAndroid Build Coastguard Worker 
536*7c568831SAndroid Build Coastguard Worker     /* Start an element named "FOOTER" as child of ORDER. */
537*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
538*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
539*7c568831SAndroid Build Coastguard Worker         printf
540*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
541*7c568831SAndroid Build Coastguard Worker         return;
542*7c568831SAndroid Build Coastguard Worker     }
543*7c568831SAndroid Build Coastguard Worker 
544*7c568831SAndroid Build Coastguard Worker     /* Write an element named "TEXT" as child of FOOTER. */
545*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
546*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "This is a text.");
547*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
548*7c568831SAndroid Build Coastguard Worker         printf
549*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
550*7c568831SAndroid Build Coastguard Worker         return;
551*7c568831SAndroid Build Coastguard Worker     }
552*7c568831SAndroid Build Coastguard Worker 
553*7c568831SAndroid Build Coastguard Worker     /* Close the element named FOOTER. */
554*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
555*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
556*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
557*7c568831SAndroid Build Coastguard Worker         return;
558*7c568831SAndroid Build Coastguard Worker     }
559*7c568831SAndroid Build Coastguard Worker 
560*7c568831SAndroid Build Coastguard Worker     /* Here we could close the elements ORDER and EXAMPLE using the
561*7c568831SAndroid Build Coastguard Worker      * function xmlTextWriterEndElement, but since we do not want to
562*7c568831SAndroid Build Coastguard Worker      * write any other elements, we simply call xmlTextWriterEndDocument,
563*7c568831SAndroid Build Coastguard Worker      * which will do all the work. */
564*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndDocument(writer);
565*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
566*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterMemory: Error at xmlTextWriterEndDocument\n");
567*7c568831SAndroid Build Coastguard Worker         return;
568*7c568831SAndroid Build Coastguard Worker     }
569*7c568831SAndroid Build Coastguard Worker 
570*7c568831SAndroid Build Coastguard Worker     xmlFreeTextWriter(writer);
571*7c568831SAndroid Build Coastguard Worker 
572*7c568831SAndroid Build Coastguard Worker     xmlBufferFree(buf);
573*7c568831SAndroid Build Coastguard Worker }
574*7c568831SAndroid Build Coastguard Worker 
575*7c568831SAndroid Build Coastguard Worker /**
576*7c568831SAndroid Build Coastguard Worker  * testXmlwriterDoc:
577*7c568831SAndroid Build Coastguard Worker  * @file: the output file
578*7c568831SAndroid Build Coastguard Worker  *
579*7c568831SAndroid Build Coastguard Worker  * test the xmlWriter interface when creating a new document
580*7c568831SAndroid Build Coastguard Worker  */
581*7c568831SAndroid Build Coastguard Worker void
testXmlwriterDoc(void)582*7c568831SAndroid Build Coastguard Worker testXmlwriterDoc(void)
583*7c568831SAndroid Build Coastguard Worker {
584*7c568831SAndroid Build Coastguard Worker     int rc;
585*7c568831SAndroid Build Coastguard Worker     xmlTextWriterPtr writer;
586*7c568831SAndroid Build Coastguard Worker     xmlDocPtr doc;
587*7c568831SAndroid Build Coastguard Worker 
588*7c568831SAndroid Build Coastguard Worker 
589*7c568831SAndroid Build Coastguard Worker     /* Create a new XmlWriter for DOM, with no compression. */
590*7c568831SAndroid Build Coastguard Worker     writer = xmlNewTextWriterDoc(&doc, 0);
591*7c568831SAndroid Build Coastguard Worker     if (writer == NULL) {
592*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error creating the xml writer\n");
593*7c568831SAndroid Build Coastguard Worker         return;
594*7c568831SAndroid Build Coastguard Worker     }
595*7c568831SAndroid Build Coastguard Worker 
596*7c568831SAndroid Build Coastguard Worker     /* Start the document with the xml default for the version,
597*7c568831SAndroid Build Coastguard Worker      * encoding ISO 8859-1 and the default for the standalone
598*7c568831SAndroid Build Coastguard Worker      * declaration. */
599*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
600*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
601*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartDocument\n");
602*7c568831SAndroid Build Coastguard Worker         return;
603*7c568831SAndroid Build Coastguard Worker     }
604*7c568831SAndroid Build Coastguard Worker 
605*7c568831SAndroid Build Coastguard Worker     /* Start an element named "EXAMPLE". Since this is the first
606*7c568831SAndroid Build Coastguard Worker      * element, this will be the root element of the document. */
607*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
608*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
609*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
610*7c568831SAndroid Build Coastguard Worker         return;
611*7c568831SAndroid Build Coastguard Worker     }
612*7c568831SAndroid Build Coastguard Worker 
613*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of EXAMPLE. */
614*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is a comment");
615*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
616*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteComment\n");
617*7c568831SAndroid Build Coastguard Worker         return;
618*7c568831SAndroid Build Coastguard Worker     }
619*7c568831SAndroid Build Coastguard Worker 
620*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ORDER" as child of EXAMPLE. */
621*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
622*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
623*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
624*7c568831SAndroid Build Coastguard Worker         return;
625*7c568831SAndroid Build Coastguard Worker     }
626*7c568831SAndroid Build Coastguard Worker 
627*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "version" and value "1.0" to ORDER. */
628*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
629*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "1.0");
630*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
631*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
632*7c568831SAndroid Build Coastguard Worker         return;
633*7c568831SAndroid Build Coastguard Worker     }
634*7c568831SAndroid Build Coastguard Worker 
635*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
636*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
637*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "de");
638*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
639*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
640*7c568831SAndroid Build Coastguard Worker         return;
641*7c568831SAndroid Build Coastguard Worker     }
642*7c568831SAndroid Build Coastguard Worker 
643*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of ORDER */
644*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is another comment");
645*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
646*7c568831SAndroid Build Coastguard Worker         printf
647*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatComment\n");
648*7c568831SAndroid Build Coastguard Worker         return;
649*7c568831SAndroid Build Coastguard Worker     }
650*7c568831SAndroid Build Coastguard Worker 
651*7c568831SAndroid Build Coastguard Worker     /* Start an element named "HEADER" as child of ORDER. */
652*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
653*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
654*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
655*7c568831SAndroid Build Coastguard Worker         return;
656*7c568831SAndroid Build Coastguard Worker     }
657*7c568831SAndroid Build Coastguard Worker 
658*7c568831SAndroid Build Coastguard Worker     /* Write an element named "X_ORDER_ID" as child of HEADER. */
659*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
660*7c568831SAndroid Build Coastguard Worker                                          "%010d", 53535);
661*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
662*7c568831SAndroid Build Coastguard Worker         printf
663*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
664*7c568831SAndroid Build Coastguard Worker         return;
665*7c568831SAndroid Build Coastguard Worker     }
666*7c568831SAndroid Build Coastguard Worker 
667*7c568831SAndroid Build Coastguard Worker     /* Write an element named "CUSTOMER_ID" as child of HEADER. */
668*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
669*7c568831SAndroid Build Coastguard Worker                                          "%d", 1010);
670*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
671*7c568831SAndroid Build Coastguard Worker         printf
672*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
673*7c568831SAndroid Build Coastguard Worker         return;
674*7c568831SAndroid Build Coastguard Worker     }
675*7c568831SAndroid Build Coastguard Worker 
676*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_1" as child of HEADER. */
677*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1",
678*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Mueller");
679*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
680*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
681*7c568831SAndroid Build Coastguard Worker         return;
682*7c568831SAndroid Build Coastguard Worker     }
683*7c568831SAndroid Build Coastguard Worker 
684*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_2" as child of HEADER. */
685*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2",
686*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Joerg");
687*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
688*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
689*7c568831SAndroid Build Coastguard Worker         return;
690*7c568831SAndroid Build Coastguard Worker     }
691*7c568831SAndroid Build Coastguard Worker 
692*7c568831SAndroid Build Coastguard Worker     /* Close the element named HEADER. */
693*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
694*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
695*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
696*7c568831SAndroid Build Coastguard Worker         return;
697*7c568831SAndroid Build Coastguard Worker     }
698*7c568831SAndroid Build Coastguard Worker 
699*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRIES" as child of ORDER. */
700*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
701*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
702*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
703*7c568831SAndroid Build Coastguard Worker         return;
704*7c568831SAndroid Build Coastguard Worker     }
705*7c568831SAndroid Build Coastguard Worker 
706*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
707*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
708*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
709*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
710*7c568831SAndroid Build Coastguard Worker         return;
711*7c568831SAndroid Build Coastguard Worker     }
712*7c568831SAndroid Build Coastguard Worker 
713*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
714*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
715*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test>");
716*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
717*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
718*7c568831SAndroid Build Coastguard Worker         return;
719*7c568831SAndroid Build Coastguard Worker     }
720*7c568831SAndroid Build Coastguard Worker 
721*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
722*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
723*7c568831SAndroid Build Coastguard Worker                                          10);
724*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
725*7c568831SAndroid Build Coastguard Worker         printf
726*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
727*7c568831SAndroid Build Coastguard Worker         return;
728*7c568831SAndroid Build Coastguard Worker     }
729*7c568831SAndroid Build Coastguard Worker 
730*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
731*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
732*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
733*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
734*7c568831SAndroid Build Coastguard Worker         return;
735*7c568831SAndroid Build Coastguard Worker     }
736*7c568831SAndroid Build Coastguard Worker 
737*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
738*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
739*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
740*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
741*7c568831SAndroid Build Coastguard Worker         return;
742*7c568831SAndroid Build Coastguard Worker     }
743*7c568831SAndroid Build Coastguard Worker 
744*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
745*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
746*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test 2>");
747*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
748*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
749*7c568831SAndroid Build Coastguard Worker         return;
750*7c568831SAndroid Build Coastguard Worker     }
751*7c568831SAndroid Build Coastguard Worker 
752*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
753*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
754*7c568831SAndroid Build Coastguard Worker                                          20);
755*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
756*7c568831SAndroid Build Coastguard Worker         printf
757*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
758*7c568831SAndroid Build Coastguard Worker         return;
759*7c568831SAndroid Build Coastguard Worker     }
760*7c568831SAndroid Build Coastguard Worker 
761*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
762*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
763*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
764*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
765*7c568831SAndroid Build Coastguard Worker         return;
766*7c568831SAndroid Build Coastguard Worker     }
767*7c568831SAndroid Build Coastguard Worker 
768*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRIES. */
769*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
770*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
771*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
772*7c568831SAndroid Build Coastguard Worker         return;
773*7c568831SAndroid Build Coastguard Worker     }
774*7c568831SAndroid Build Coastguard Worker 
775*7c568831SAndroid Build Coastguard Worker     /* Start an element named "FOOTER" as child of ORDER. */
776*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
777*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
778*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
779*7c568831SAndroid Build Coastguard Worker         return;
780*7c568831SAndroid Build Coastguard Worker     }
781*7c568831SAndroid Build Coastguard Worker 
782*7c568831SAndroid Build Coastguard Worker     /* Write an element named "TEXT" as child of FOOTER. */
783*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
784*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "This is a text.");
785*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
786*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
787*7c568831SAndroid Build Coastguard Worker         return;
788*7c568831SAndroid Build Coastguard Worker     }
789*7c568831SAndroid Build Coastguard Worker 
790*7c568831SAndroid Build Coastguard Worker     /* Close the element named FOOTER. */
791*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
792*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
793*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
794*7c568831SAndroid Build Coastguard Worker         return;
795*7c568831SAndroid Build Coastguard Worker     }
796*7c568831SAndroid Build Coastguard Worker 
797*7c568831SAndroid Build Coastguard Worker     /* Here we could close the elements ORDER and EXAMPLE using the
798*7c568831SAndroid Build Coastguard Worker      * function xmlTextWriterEndElement, but since we do not want to
799*7c568831SAndroid Build Coastguard Worker      * write any other elements, we simply call xmlTextWriterEndDocument,
800*7c568831SAndroid Build Coastguard Worker      * which will do all the work. */
801*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndDocument(writer);
802*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
803*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterDoc: Error at xmlTextWriterEndDocument\n");
804*7c568831SAndroid Build Coastguard Worker         return;
805*7c568831SAndroid Build Coastguard Worker     }
806*7c568831SAndroid Build Coastguard Worker 
807*7c568831SAndroid Build Coastguard Worker     xmlFreeTextWriter(writer);
808*7c568831SAndroid Build Coastguard Worker 
809*7c568831SAndroid Build Coastguard Worker     xmlFreeDoc(doc);
810*7c568831SAndroid Build Coastguard Worker }
811*7c568831SAndroid Build Coastguard Worker 
812*7c568831SAndroid Build Coastguard Worker /**
813*7c568831SAndroid Build Coastguard Worker  * testXmlwriterTree:
814*7c568831SAndroid Build Coastguard Worker  * @file: the output file
815*7c568831SAndroid Build Coastguard Worker  *
816*7c568831SAndroid Build Coastguard Worker  * test the xmlWriter interface when writing to a subtree
817*7c568831SAndroid Build Coastguard Worker  */
818*7c568831SAndroid Build Coastguard Worker void
testXmlwriterTree(void)819*7c568831SAndroid Build Coastguard Worker testXmlwriterTree(void)
820*7c568831SAndroid Build Coastguard Worker {
821*7c568831SAndroid Build Coastguard Worker     int rc;
822*7c568831SAndroid Build Coastguard Worker     xmlTextWriterPtr writer;
823*7c568831SAndroid Build Coastguard Worker     xmlDocPtr doc;
824*7c568831SAndroid Build Coastguard Worker     xmlNodePtr node;
825*7c568831SAndroid Build Coastguard Worker 
826*7c568831SAndroid Build Coastguard Worker     /* Create a new XML DOM tree, to which the XML document will be
827*7c568831SAndroid Build Coastguard Worker      * written */
828*7c568831SAndroid Build Coastguard Worker     doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
829*7c568831SAndroid Build Coastguard Worker     if (doc == NULL) {
830*7c568831SAndroid Build Coastguard Worker         printf
831*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error creating the xml document tree\n");
832*7c568831SAndroid Build Coastguard Worker         return;
833*7c568831SAndroid Build Coastguard Worker     }
834*7c568831SAndroid Build Coastguard Worker 
835*7c568831SAndroid Build Coastguard Worker     /* Create a new XML node, to which the XML document will be
836*7c568831SAndroid Build Coastguard Worker      * appended */
837*7c568831SAndroid Build Coastguard Worker     node = xmlNewDocNode(doc, NULL, BAD_CAST "EXAMPLE", NULL);
838*7c568831SAndroid Build Coastguard Worker     if (node == NULL) {
839*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error creating the xml node\n");
840*7c568831SAndroid Build Coastguard Worker         return;
841*7c568831SAndroid Build Coastguard Worker     }
842*7c568831SAndroid Build Coastguard Worker 
843*7c568831SAndroid Build Coastguard Worker     /* Make ELEMENT the root node of the tree */
844*7c568831SAndroid Build Coastguard Worker     xmlDocSetRootElement(doc, node);
845*7c568831SAndroid Build Coastguard Worker 
846*7c568831SAndroid Build Coastguard Worker     /* Create a new XmlWriter for DOM tree, with no compression. */
847*7c568831SAndroid Build Coastguard Worker     writer = xmlNewTextWriterTree(doc, node, 0);
848*7c568831SAndroid Build Coastguard Worker     if (writer == NULL) {
849*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error creating the xml writer\n");
850*7c568831SAndroid Build Coastguard Worker         return;
851*7c568831SAndroid Build Coastguard Worker     }
852*7c568831SAndroid Build Coastguard Worker 
853*7c568831SAndroid Build Coastguard Worker     /* Start the document with the xml default for the version,
854*7c568831SAndroid Build Coastguard Worker      * encoding ISO 8859-1 and the default for the standalone
855*7c568831SAndroid Build Coastguard Worker      * declaration. */
856*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
857*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
858*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartDocument\n");
859*7c568831SAndroid Build Coastguard Worker         return;
860*7c568831SAndroid Build Coastguard Worker     }
861*7c568831SAndroid Build Coastguard Worker 
862*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of EXAMPLE. */
863*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is a comment");
864*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
865*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterWriteComment\n");
866*7c568831SAndroid Build Coastguard Worker         return;
867*7c568831SAndroid Build Coastguard Worker     }
868*7c568831SAndroid Build Coastguard Worker 
869*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ORDER" as child of EXAMPLE. */
870*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
871*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
872*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
873*7c568831SAndroid Build Coastguard Worker         return;
874*7c568831SAndroid Build Coastguard Worker     }
875*7c568831SAndroid Build Coastguard Worker 
876*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "version" and value "1.0" to ORDER. */
877*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
878*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "1.0");
879*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
880*7c568831SAndroid Build Coastguard Worker         printf
881*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
882*7c568831SAndroid Build Coastguard Worker         return;
883*7c568831SAndroid Build Coastguard Worker     }
884*7c568831SAndroid Build Coastguard Worker 
885*7c568831SAndroid Build Coastguard Worker     /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
886*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
887*7c568831SAndroid Build Coastguard Worker                                      BAD_CAST "de");
888*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
889*7c568831SAndroid Build Coastguard Worker         printf
890*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
891*7c568831SAndroid Build Coastguard Worker         return;
892*7c568831SAndroid Build Coastguard Worker     }
893*7c568831SAndroid Build Coastguard Worker 
894*7c568831SAndroid Build Coastguard Worker     /* Write a comment as child of ORDER */
895*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteComment(writer, BAD_CAST "This is another comment");
896*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
897*7c568831SAndroid Build Coastguard Worker         printf
898*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteFormatComment\n");
899*7c568831SAndroid Build Coastguard Worker         return;
900*7c568831SAndroid Build Coastguard Worker     }
901*7c568831SAndroid Build Coastguard Worker 
902*7c568831SAndroid Build Coastguard Worker     /* Start an element named "HEADER" as child of ORDER. */
903*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
904*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
905*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
906*7c568831SAndroid Build Coastguard Worker         return;
907*7c568831SAndroid Build Coastguard Worker     }
908*7c568831SAndroid Build Coastguard Worker 
909*7c568831SAndroid Build Coastguard Worker     /* Write an element named "X_ORDER_ID" as child of HEADER. */
910*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
911*7c568831SAndroid Build Coastguard Worker                                          "%010d", 53535);
912*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
913*7c568831SAndroid Build Coastguard Worker         printf
914*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
915*7c568831SAndroid Build Coastguard Worker         return;
916*7c568831SAndroid Build Coastguard Worker     }
917*7c568831SAndroid Build Coastguard Worker 
918*7c568831SAndroid Build Coastguard Worker     /* Write an element named "CUSTOMER_ID" as child of HEADER. */
919*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
920*7c568831SAndroid Build Coastguard Worker                                          "%d", 1010);
921*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
922*7c568831SAndroid Build Coastguard Worker         printf
923*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
924*7c568831SAndroid Build Coastguard Worker         return;
925*7c568831SAndroid Build Coastguard Worker     }
926*7c568831SAndroid Build Coastguard Worker 
927*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_1" as child of HEADER. */
928*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1",
929*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Mueller");
930*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
931*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
932*7c568831SAndroid Build Coastguard Worker         return;
933*7c568831SAndroid Build Coastguard Worker     }
934*7c568831SAndroid Build Coastguard Worker 
935*7c568831SAndroid Build Coastguard Worker     /* Write an element named "NAME_2" as child of HEADER. */
936*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2",
937*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "Joerg");
938*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
939*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
940*7c568831SAndroid Build Coastguard Worker         return;
941*7c568831SAndroid Build Coastguard Worker     }
942*7c568831SAndroid Build Coastguard Worker 
943*7c568831SAndroid Build Coastguard Worker     /* Close the element named HEADER. */
944*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
945*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
946*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
947*7c568831SAndroid Build Coastguard Worker         return;
948*7c568831SAndroid Build Coastguard Worker     }
949*7c568831SAndroid Build Coastguard Worker 
950*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRIES" as child of ORDER. */
951*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
952*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
953*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
954*7c568831SAndroid Build Coastguard Worker         return;
955*7c568831SAndroid Build Coastguard Worker     }
956*7c568831SAndroid Build Coastguard Worker 
957*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
958*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
959*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
960*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
961*7c568831SAndroid Build Coastguard Worker         return;
962*7c568831SAndroid Build Coastguard Worker     }
963*7c568831SAndroid Build Coastguard Worker 
964*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
965*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
966*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test>");
967*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
968*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
969*7c568831SAndroid Build Coastguard Worker         return;
970*7c568831SAndroid Build Coastguard Worker     }
971*7c568831SAndroid Build Coastguard Worker 
972*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
973*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
974*7c568831SAndroid Build Coastguard Worker                                          10);
975*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
976*7c568831SAndroid Build Coastguard Worker         printf
977*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
978*7c568831SAndroid Build Coastguard Worker         return;
979*7c568831SAndroid Build Coastguard Worker     }
980*7c568831SAndroid Build Coastguard Worker 
981*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
982*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
983*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
984*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
985*7c568831SAndroid Build Coastguard Worker         return;
986*7c568831SAndroid Build Coastguard Worker     }
987*7c568831SAndroid Build Coastguard Worker 
988*7c568831SAndroid Build Coastguard Worker     /* Start an element named "ENTRY" as child of ENTRIES. */
989*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
990*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
991*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
992*7c568831SAndroid Build Coastguard Worker         return;
993*7c568831SAndroid Build Coastguard Worker     }
994*7c568831SAndroid Build Coastguard Worker 
995*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ARTICLE" as child of ENTRY. */
996*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
997*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "<Test 2>");
998*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
999*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
1000*7c568831SAndroid Build Coastguard Worker         return;
1001*7c568831SAndroid Build Coastguard Worker     }
1002*7c568831SAndroid Build Coastguard Worker 
1003*7c568831SAndroid Build Coastguard Worker     /* Write an element named "ENTRY_NO" as child of ENTRY. */
1004*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
1005*7c568831SAndroid Build Coastguard Worker                                          20);
1006*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1007*7c568831SAndroid Build Coastguard Worker         printf
1008*7c568831SAndroid Build Coastguard Worker             ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
1009*7c568831SAndroid Build Coastguard Worker         return;
1010*7c568831SAndroid Build Coastguard Worker     }
1011*7c568831SAndroid Build Coastguard Worker 
1012*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRY. */
1013*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
1014*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1015*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
1016*7c568831SAndroid Build Coastguard Worker         return;
1017*7c568831SAndroid Build Coastguard Worker     }
1018*7c568831SAndroid Build Coastguard Worker 
1019*7c568831SAndroid Build Coastguard Worker     /* Close the element named ENTRIES. */
1020*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
1021*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1022*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
1023*7c568831SAndroid Build Coastguard Worker         return;
1024*7c568831SAndroid Build Coastguard Worker     }
1025*7c568831SAndroid Build Coastguard Worker 
1026*7c568831SAndroid Build Coastguard Worker     /* Start an element named "FOOTER" as child of ORDER. */
1027*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
1028*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1029*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
1030*7c568831SAndroid Build Coastguard Worker         return;
1031*7c568831SAndroid Build Coastguard Worker     }
1032*7c568831SAndroid Build Coastguard Worker 
1033*7c568831SAndroid Build Coastguard Worker     /* Write an element named "TEXT" as child of FOOTER. */
1034*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
1035*7c568831SAndroid Build Coastguard Worker                                    BAD_CAST "This is a text.");
1036*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1037*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
1038*7c568831SAndroid Build Coastguard Worker         return;
1039*7c568831SAndroid Build Coastguard Worker     }
1040*7c568831SAndroid Build Coastguard Worker 
1041*7c568831SAndroid Build Coastguard Worker     /* Close the element named FOOTER. */
1042*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndElement(writer);
1043*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1044*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
1045*7c568831SAndroid Build Coastguard Worker         return;
1046*7c568831SAndroid Build Coastguard Worker     }
1047*7c568831SAndroid Build Coastguard Worker 
1048*7c568831SAndroid Build Coastguard Worker     /* Here we could close the elements ORDER and EXAMPLE using the
1049*7c568831SAndroid Build Coastguard Worker      * function xmlTextWriterEndElement, but since we do not want to
1050*7c568831SAndroid Build Coastguard Worker      * write any other elements, we simply call xmlTextWriterEndDocument,
1051*7c568831SAndroid Build Coastguard Worker      * which will do all the work. */
1052*7c568831SAndroid Build Coastguard Worker     rc = xmlTextWriterEndDocument(writer);
1053*7c568831SAndroid Build Coastguard Worker     if (rc < 0) {
1054*7c568831SAndroid Build Coastguard Worker         printf("testXmlwriterTree: Error at xmlTextWriterEndDocument\n");
1055*7c568831SAndroid Build Coastguard Worker         return;
1056*7c568831SAndroid Build Coastguard Worker     }
1057*7c568831SAndroid Build Coastguard Worker 
1058*7c568831SAndroid Build Coastguard Worker     xmlFreeTextWriter(writer);
1059*7c568831SAndroid Build Coastguard Worker 
1060*7c568831SAndroid Build Coastguard Worker     xmlFreeDoc(doc);
1061*7c568831SAndroid Build Coastguard Worker }
1062*7c568831SAndroid Build Coastguard Worker 
1063*7c568831SAndroid Build Coastguard Worker #else
main(void)1064*7c568831SAndroid Build Coastguard Worker int main(void) {
1065*7c568831SAndroid Build Coastguard Worker     fprintf(stderr, "Writer or output support not compiled in\n");
1066*7c568831SAndroid Build Coastguard Worker     return 0;
1067*7c568831SAndroid Build Coastguard Worker }
1068*7c568831SAndroid Build Coastguard Worker #endif
1069