Blame doc/examples/testWriter.c

Packit Service a31ea6
/**
Packit Service a31ea6
 * section: xmlWriter
Packit Service a31ea6
 * synopsis: use various APIs for the xmlWriter
Packit Service a31ea6
 * purpose: tests a number of APIs for the xmlWriter, especially
Packit Service a31ea6
 *          the various methods to write to a filename, to a memory
Packit Service a31ea6
 *          buffer, to a new document, or to a subtree. It shows how to
Packit Service a31ea6
 *          do encoding string conversions too. The resulting
Packit Service a31ea6
 *          documents are then serialized.
Packit Service a31ea6
 * usage: testWriter
Packit Service a31ea6
 * test: testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done
Packit Service a31ea6
 * author: Alfred Mickautsch
Packit Service a31ea6
 * copy: see Copyright for the status of this software.
Packit Service a31ea6
 */
Packit Service a31ea6
#include <stdio.h>
Packit Service a31ea6
#include <string.h>
Packit Service a31ea6
#include <libxml/encoding.h>
Packit Service a31ea6
#include <libxml/xmlwriter.h>
Packit Service a31ea6
Packit Service a31ea6
#if defined(LIBXML_WRITER_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
Packit Service a31ea6
Packit Service a31ea6
#define MY_ENCODING "ISO-8859-1"
Packit Service a31ea6
Packit Service a31ea6
void testXmlwriterFilename(const char *uri);
Packit Service a31ea6
void testXmlwriterMemory(const char *file);
Packit Service a31ea6
void testXmlwriterDoc(const char *file);
Packit Service a31ea6
void testXmlwriterTree(const char *file);
Packit Service a31ea6
xmlChar *ConvertInput(const char *in, const char *encoding);
Packit Service a31ea6
Packit Service a31ea6
int
Packit Service a31ea6
main(void)
Packit Service a31ea6
{
Packit Service a31ea6
    /*
Packit Service a31ea6
     * this initialize the library and check potential ABI mismatches
Packit Service a31ea6
     * between the version it was compiled for and the actual shared
Packit Service a31ea6
     * library used.
Packit Service a31ea6
     */
Packit Service a31ea6
    LIBXML_TEST_VERSION
Packit Service a31ea6
Packit Service a31ea6
    /* first, the file version */
Packit Service a31ea6
    testXmlwriterFilename("writer1.tmp");
Packit Service a31ea6
Packit Service a31ea6
    /* next, the memory version */
Packit Service a31ea6
    testXmlwriterMemory("writer2.tmp");
Packit Service a31ea6
Packit Service a31ea6
    /* next, the DOM version */
Packit Service a31ea6
    testXmlwriterDoc("writer3.tmp");
Packit Service a31ea6
Packit Service a31ea6
    /* next, the tree version */
Packit Service a31ea6
    testXmlwriterTree("writer4.tmp");
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Cleanup function for the XML library.
Packit Service a31ea6
     */
Packit Service a31ea6
    xmlCleanupParser();
Packit Service a31ea6
    /*
Packit Service a31ea6
     * this is to debug memory for regression tests
Packit Service a31ea6
     */
Packit Service a31ea6
    xmlMemoryDump();
Packit Service a31ea6
    return 0;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * testXmlwriterFilename:
Packit Service a31ea6
 * @uri: the output URI
Packit Service a31ea6
 *
Packit Service a31ea6
 * test the xmlWriter interface when writing to a new file
Packit Service a31ea6
 */
Packit Service a31ea6
void
Packit Service a31ea6
testXmlwriterFilename(const char *uri)
Packit Service a31ea6
{
Packit Service a31ea6
    int rc;
Packit Service a31ea6
    xmlTextWriterPtr writer;
Packit Service a31ea6
    xmlChar *tmp;
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XmlWriter for uri, with no compression. */
Packit Service a31ea6
    writer = xmlNewTextWriterFilename(uri, 0);
Packit Service a31ea6
    if (writer == NULL) {
Packit Service a31ea6
        printf("testXmlwriterFilename: Error creating the xml writer\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start the document with the xml default for the version,
Packit Service a31ea6
     * encoding ISO 8859-1 and the default for the standalone
Packit Service a31ea6
     * declaration. */
Packit Service a31ea6
    rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "EXAMPLE". Since thist is the first
Packit Service a31ea6
     * element, this will be the root element of the document. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of EXAMPLE.
Packit Service a31ea6
     * Please observe, that the input to the xmlTextWriter functions
Packit Service a31ea6
     * HAS to be in UTF-8, even if the output XML is encoded
Packit Service a31ea6
     * in iso-8859-1 */
Packit Service a31ea6
    tmp = ConvertInput("This is a comment with special chars: <\xE4\xF6\xFC>",
Packit Service a31ea6
                       MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteComment(writer, tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ORDER" as child of EXAMPLE. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "version" and value "1.0" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
Packit Service a31ea6
                                     BAD_CAST "1.0");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
Packit Service a31ea6
                                     BAD_CAST "de");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of ORDER */
Packit Service a31ea6
    tmp = ConvertInput("<\xE4\xF6\xFC>", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatComment(writer,
Packit Service a31ea6
		     "This is another comment with special chars: %s",
Packit Service a31ea6
		     tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "HEADER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "X_ORDER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
Packit Service a31ea6
                                         "%010d", 53535);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "CUSTOMER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
Packit Service a31ea6
                                         "%d", 1010);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_1" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("M\xFCller", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_2" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("J\xF6rg", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRIES" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         10);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test 2>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         20);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "FOOTER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "TEXT" as child of FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
Packit Service a31ea6
                                   BAD_CAST "This is a text.");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Here we could close the elements ORDER and EXAMPLE using the
Packit Service a31ea6
     * function xmlTextWriterEndElement, but since we do not want to
Packit Service a31ea6
     * write any other elements, we simply call xmlTextWriterEndDocument,
Packit Service a31ea6
     * which will do all the work. */
Packit Service a31ea6
    rc = xmlTextWriterEndDocument(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterFilename: Error at xmlTextWriterEndDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    xmlFreeTextWriter(writer);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * testXmlwriterMemory:
Packit Service a31ea6
 * @file: the output file
Packit Service a31ea6
 *
Packit Service a31ea6
 * test the xmlWriter interface when writing to memory
Packit Service a31ea6
 */
Packit Service a31ea6
void
Packit Service a31ea6
testXmlwriterMemory(const char *file)
Packit Service a31ea6
{
Packit Service a31ea6
    int rc;
Packit Service a31ea6
    xmlTextWriterPtr writer;
Packit Service a31ea6
    xmlBufferPtr buf;
Packit Service a31ea6
    xmlChar *tmp;
Packit Service a31ea6
    FILE *fp;
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XML buffer, to which the XML document will be
Packit Service a31ea6
     * written */
Packit Service a31ea6
    buf = xmlBufferCreate();
Packit Service a31ea6
    if (buf == NULL) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error creating the xml buffer\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XmlWriter for memory, with no compression.
Packit Service a31ea6
     * Remark: there is no compression for this kind of xmlTextWriter */
Packit Service a31ea6
    writer = xmlNewTextWriterMemory(buf, 0);
Packit Service a31ea6
    if (writer == NULL) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error creating the xml writer\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start the document with the xml default for the version,
Packit Service a31ea6
     * encoding ISO 8859-1 and the default for the standalone
Packit Service a31ea6
     * declaration. */
Packit Service a31ea6
    rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "EXAMPLE". Since thist is the first
Packit Service a31ea6
     * element, this will be the root element of the document. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of EXAMPLE.
Packit Service a31ea6
     * Please observe, that the input to the xmlTextWriter functions
Packit Service a31ea6
     * HAS to be in UTF-8, even if the output XML is encoded
Packit Service a31ea6
     * in iso-8859-1 */
Packit Service a31ea6
    tmp = ConvertInput("This is a comment with special chars: <\xE4\xF6\xFC>",
Packit Service a31ea6
                       MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteComment(writer, tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ORDER" as child of EXAMPLE. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "version" and value "1.0" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
Packit Service a31ea6
                                     BAD_CAST "1.0");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
Packit Service a31ea6
                                     BAD_CAST "de");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of ORDER */
Packit Service a31ea6
    tmp = ConvertInput("<\xE4\xF6\xFC>", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatComment(writer,
Packit Service a31ea6
		     "This is another comment with special chars: %s",
Packit Service a31ea6
                                         tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "HEADER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "X_ORDER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
Packit Service a31ea6
                                         "%010d", 53535);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "CUSTOMER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
Packit Service a31ea6
                                         "%d", 1010);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_1" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("M\xFCller", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_2" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("J\xF6rg", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
Packit Service a31ea6
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRIES" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         10);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test 2>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         20);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "FOOTER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "TEXT" as child of FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
Packit Service a31ea6
                                   BAD_CAST "This is a text.");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Here we could close the elements ORDER and EXAMPLE using the
Packit Service a31ea6
     * function xmlTextWriterEndElement, but since we do not want to
Packit Service a31ea6
     * write any other elements, we simply call xmlTextWriterEndDocument,
Packit Service a31ea6
     * which will do all the work. */
Packit Service a31ea6
    rc = xmlTextWriterEndDocument(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at xmlTextWriterEndDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    xmlFreeTextWriter(writer);
Packit Service a31ea6
Packit Service a31ea6
    fp = fopen(file, "w");
Packit Service a31ea6
    if (fp == NULL) {
Packit Service a31ea6
        printf("testXmlwriterMemory: Error at fopen\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    fprintf(fp, "%s", (const char *) buf->content);
Packit Service a31ea6
Packit Service a31ea6
    fclose(fp);
Packit Service a31ea6
Packit Service a31ea6
    xmlBufferFree(buf);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * testXmlwriterDoc:
Packit Service a31ea6
 * @file: the output file
Packit Service a31ea6
 *
Packit Service a31ea6
 * test the xmlWriter interface when creating a new document
Packit Service a31ea6
 */
Packit Service a31ea6
void
Packit Service a31ea6
testXmlwriterDoc(const char *file)
Packit Service a31ea6
{
Packit Service a31ea6
    int rc;
Packit Service a31ea6
    xmlTextWriterPtr writer;
Packit Service a31ea6
    xmlChar *tmp;
Packit Service a31ea6
    xmlDocPtr doc;
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XmlWriter for DOM, with no compression. */
Packit Service a31ea6
    writer = xmlNewTextWriterDoc(&doc, 0);
Packit Service a31ea6
    if (writer == NULL) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error creating the xml writer\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start the document with the xml default for the version,
Packit Service a31ea6
     * encoding ISO 8859-1 and the default for the standalone
Packit Service a31ea6
     * declaration. */
Packit Service a31ea6
    rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "EXAMPLE". Since thist is the first
Packit Service a31ea6
     * element, this will be the root element of the document. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of EXAMPLE.
Packit Service a31ea6
     * Please observe, that the input to the xmlTextWriter functions
Packit Service a31ea6
     * HAS to be in UTF-8, even if the output XML is encoded
Packit Service a31ea6
     * in iso-8859-1 */
Packit Service a31ea6
    tmp = ConvertInput("This is a comment with special chars: <\xE4\xF6\xFC>",
Packit Service a31ea6
                       MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteComment(writer, tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ORDER" as child of EXAMPLE. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "version" and value "1.0" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
Packit Service a31ea6
                                     BAD_CAST "1.0");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
Packit Service a31ea6
                                     BAD_CAST "de");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of ORDER */
Packit Service a31ea6
    tmp = ConvertInput("<\xE4\xF6\xFC>", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatComment(writer,
Packit Service a31ea6
		 "This is another comment with special chars: %s",
Packit Service a31ea6
		                         tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "HEADER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "X_ORDER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
Packit Service a31ea6
                                         "%010d", 53535);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "CUSTOMER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
Packit Service a31ea6
                                         "%d", 1010);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_1" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("M\xFCller", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_2" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("J\xF6rg", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRIES" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         10);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test 2>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         20);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "FOOTER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "TEXT" as child of FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
Packit Service a31ea6
                                   BAD_CAST "This is a text.");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Here we could close the elements ORDER and EXAMPLE using the
Packit Service a31ea6
     * function xmlTextWriterEndElement, but since we do not want to
Packit Service a31ea6
     * write any other elements, we simply call xmlTextWriterEndDocument,
Packit Service a31ea6
     * which will do all the work. */
Packit Service a31ea6
    rc = xmlTextWriterEndDocument(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterDoc: Error at xmlTextWriterEndDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    xmlFreeTextWriter(writer);
Packit Service a31ea6
Packit Service a31ea6
    xmlSaveFileEnc(file, doc, MY_ENCODING);
Packit Service a31ea6
Packit Service a31ea6
    xmlFreeDoc(doc);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * testXmlwriterTree:
Packit Service a31ea6
 * @file: the output file
Packit Service a31ea6
 *
Packit Service a31ea6
 * test the xmlWriter interface when writing to a subtree
Packit Service a31ea6
 */
Packit Service a31ea6
void
Packit Service a31ea6
testXmlwriterTree(const char *file)
Packit Service a31ea6
{
Packit Service a31ea6
    int rc;
Packit Service a31ea6
    xmlTextWriterPtr writer;
Packit Service a31ea6
    xmlDocPtr doc;
Packit Service a31ea6
    xmlNodePtr node;
Packit Service a31ea6
    xmlChar *tmp;
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XML DOM tree, to which the XML document will be
Packit Service a31ea6
     * written */
Packit Service a31ea6
    doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
Packit Service a31ea6
    if (doc == NULL) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error creating the xml document tree\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XML node, to which the XML document will be
Packit Service a31ea6
     * appended */
Packit Service a31ea6
    node = xmlNewDocNode(doc, NULL, BAD_CAST "EXAMPLE", NULL);
Packit Service a31ea6
    if (node == NULL) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error creating the xml node\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Make ELEMENT the root node of the tree */
Packit Service a31ea6
    xmlDocSetRootElement(doc, node);
Packit Service a31ea6
Packit Service a31ea6
    /* Create a new XmlWriter for DOM tree, with no compression. */
Packit Service a31ea6
    writer = xmlNewTextWriterTree(doc, node, 0);
Packit Service a31ea6
    if (writer == NULL) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error creating the xml writer\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start the document with the xml default for the version,
Packit Service a31ea6
     * encoding ISO 8859-1 and the default for the standalone
Packit Service a31ea6
     * declaration. */
Packit Service a31ea6
    rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of EXAMPLE.
Packit Service a31ea6
     * Please observe, that the input to the xmlTextWriter functions
Packit Service a31ea6
     * HAS to be in UTF-8, even if the output XML is encoded
Packit Service a31ea6
     * in iso-8859-1 */
Packit Service a31ea6
    tmp = ConvertInput("This is a comment with special chars: <\xE4\xF6\xFC>",
Packit Service a31ea6
                       MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteComment(writer, tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterWriteComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ORDER" as child of EXAMPLE. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "version" and value "1.0" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
Packit Service a31ea6
                                     BAD_CAST "1.0");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
Packit Service a31ea6
                                     BAD_CAST "de");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write a comment as child of ORDER */
Packit Service a31ea6
    tmp = ConvertInput("<\xE4\xF6\xFC>", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatComment(writer,
Packit Service a31ea6
			 "This is another comment with special chars: %s",
Packit Service a31ea6
					  tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteFormatComment\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "HEADER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "X_ORDER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
Packit Service a31ea6
                                         "%010d", 53535);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "CUSTOMER_ID" as child of HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
Packit Service a31ea6
                                         "%d", 1010);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_1" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("M\xFCller", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "NAME_2" as child of HEADER. */
Packit Service a31ea6
    tmp = ConvertInput("J\xF6rg", MY_ENCODING);
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (tmp != NULL) xmlFree(tmp);
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named HEADER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRIES" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         10);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "ENTRY" as child of ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ARTICLE" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
Packit Service a31ea6
                                   BAD_CAST "<Test 2>");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "ENTRY_NO" as child of ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
Packit Service a31ea6
                                         20);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf
Packit Service a31ea6
            ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRY. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named ENTRIES. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Start an element named "FOOTER" as child of ORDER. */
Packit Service a31ea6
    rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Write an element named "TEXT" as child of FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
Packit Service a31ea6
                                   BAD_CAST "This is a text.");
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Close the element named FOOTER. */
Packit Service a31ea6
    rc = xmlTextWriterEndElement(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /* Here we could close the elements ORDER and EXAMPLE using the
Packit Service a31ea6
     * function xmlTextWriterEndElement, but since we do not want to
Packit Service a31ea6
     * write any other elements, we simply call xmlTextWriterEndDocument,
Packit Service a31ea6
     * which will do all the work. */
Packit Service a31ea6
    rc = xmlTextWriterEndDocument(writer);
Packit Service a31ea6
    if (rc < 0) {
Packit Service a31ea6
        printf("testXmlwriterTree: Error at xmlTextWriterEndDocument\n");
Packit Service a31ea6
        return;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    xmlFreeTextWriter(writer);
Packit Service a31ea6
Packit Service a31ea6
    xmlSaveFileEnc(file, doc, MY_ENCODING);
Packit Service a31ea6
Packit Service a31ea6
    xmlFreeDoc(doc);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * ConvertInput:
Packit Service a31ea6
 * @in: string in a given encoding
Packit Service a31ea6
 * @encoding: the encoding used
Packit Service a31ea6
 *
Packit Service a31ea6
 * Converts @in into UTF-8 for processing with libxml2 APIs
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns the converted UTF-8 string, or NULL in case of error.
Packit Service a31ea6
 */
Packit Service a31ea6
xmlChar *
Packit Service a31ea6
ConvertInput(const char *in, const char *encoding)
Packit Service a31ea6
{
Packit Service a31ea6
    xmlChar *out;
Packit Service a31ea6
    int ret;
Packit Service a31ea6
    int size;
Packit Service a31ea6
    int out_size;
Packit Service a31ea6
    int temp;
Packit Service a31ea6
    xmlCharEncodingHandlerPtr handler;
Packit Service a31ea6
Packit Service a31ea6
    if (in == 0)
Packit Service a31ea6
        return 0;
Packit Service a31ea6
Packit Service a31ea6
    handler = xmlFindCharEncodingHandler(encoding);
Packit Service a31ea6
Packit Service a31ea6
    if (!handler) {
Packit Service a31ea6
        printf("ConvertInput: no encoding handler found for '%s'\n",
Packit Service a31ea6
               encoding ? encoding : "");
Packit Service a31ea6
        return 0;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    size = (int) strlen(in) + 1;
Packit Service a31ea6
    out_size = size * 2 - 1;
Packit Service a31ea6
    out = (unsigned char *) xmlMalloc((size_t) out_size);
Packit Service a31ea6
Packit Service a31ea6
    if (out != 0) {
Packit Service a31ea6
        temp = size - 1;
Packit Service a31ea6
        ret = handler->input(out, &out_size, (const xmlChar *) in, &temp);
Packit Service a31ea6
        if ((ret < 0) || (temp - size + 1)) {
Packit Service a31ea6
            if (ret < 0) {
Packit Service a31ea6
                printf("ConvertInput: conversion wasn't successful.\n");
Packit Service a31ea6
            } else {
Packit Service a31ea6
                printf
Packit Service a31ea6
                    ("ConvertInput: conversion wasn't successful. converted: %i octets.\n",
Packit Service a31ea6
                     temp);
Packit Service a31ea6
            }
Packit Service a31ea6
Packit Service a31ea6
            xmlFree(out);
Packit Service a31ea6
            out = 0;
Packit Service a31ea6
        } else {
Packit Service a31ea6
            out = (unsigned char *) xmlRealloc(out, out_size + 1);
Packit Service a31ea6
            out[out_size] = 0;  /*null terminating out */
Packit Service a31ea6
        }
Packit Service a31ea6
    } else {
Packit Service a31ea6
        printf("ConvertInput: no mem\n");
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    return out;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
#else
Packit Service a31ea6
int main(void) {
Packit Service a31ea6
    fprintf(stderr, "Writer or output support not compiled in\n");
Packit Service a31ea6
    exit(1);
Packit Service a31ea6
}
Packit Service a31ea6
#endif