#include <stdio.h>
#include <string.h>
#include <libxml/encoding.h>
#include <libxml/xmlwriter.h>
#if defined(LIBXML_WRITER_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
#define MY_ENCODING "ISO-8859-1"
void testXmlwriterFilename(const char *uri);
void testXmlwriterMemory(const char *file);
void testXmlwriterDoc(const char *file);
void testXmlwriterTree(const char *file);
xmlChar *ConvertInput(const char *in, const char *encoding);
int
main(void)
{
LIBXML_TEST_VERSION
testXmlwriterFilename("writer1.res");
testXmlwriterMemory("writer2.res");
testXmlwriterDoc("writer3.res");
testXmlwriterTree("writer4.res");
xmlCleanupParser();
xmlMemoryDump();
return 0;
}
void
testXmlwriterFilename(const char *uri)
{
int rc;
xmlTextWriterPtr writer;
xmlChar *tmp;
writer = xmlNewTextWriterFilename(uri, 0);
if (writer == NULL) {
printf("testXmlwriterFilename: Error creating the xml writer\n");
return;
}
rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartDocument\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
tmp = ConvertInput("This is a comment with special chars: <äöü>",
MY_ENCODING);
rc = xmlTextWriterWriteComment(writer, tmp);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
BAD_CAST "1.0");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
BAD_CAST "de");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
return;
}
tmp = ConvertInput("<äöü>", MY_ENCODING);
rc = xmlTextWriterWriteFormatComment(writer,
"This is another comment with special chars: %s",
tmp);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteFormatComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
"%010d", 53535L);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
"%d", 1010);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
return;
}
tmp = ConvertInput("Müller", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
tmp = ConvertInput("Jörg", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test>");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
10);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test 2>");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
20);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
BAD_CAST "This is a text.");
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndDocument(writer);
if (rc < 0) {
printf
("testXmlwriterFilename: Error at xmlTextWriterEndDocument\n");
return;
}
xmlFreeTextWriter(writer);
}
void
testXmlwriterMemory(const char *file)
{
int rc;
xmlTextWriterPtr writer;
xmlBufferPtr buf;
xmlChar *tmp;
FILE *fp;
buf = xmlBufferCreate();
if (buf == NULL) {
printf("testXmlwriterMemory: Error creating the xml buffer\n");
return;
}
writer = xmlNewTextWriterMemory(buf, 0);
if (writer == NULL) {
printf("testXmlwriterMemory: Error creating the xml writer\n");
return;
}
rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartDocument\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
tmp = ConvertInput("This is a comment with special chars: <äöü>",
MY_ENCODING);
rc = xmlTextWriterWriteComment(writer, tmp);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
BAD_CAST "1.0");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
BAD_CAST "de");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
return;
}
tmp = ConvertInput("<äöü>", MY_ENCODING);
rc = xmlTextWriterWriteFormatComment(writer,
"This is another comment with special chars: %s",
tmp);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteFormatComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
"%010d", 53535L);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
"%d", 1010);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
return;
}
tmp = ConvertInput("Müller", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
tmp = ConvertInput("Jörg", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test>");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
10);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test 2>");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
20);
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
BAD_CAST "This is a text.");
if (rc < 0) {
printf
("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndDocument(writer);
if (rc < 0) {
printf("testXmlwriterMemory: Error at xmlTextWriterEndDocument\n");
return;
}
xmlFreeTextWriter(writer);
fp = fopen(file, "w");
if (fp == NULL) {
printf("testXmlwriterMemory: Error at fopen\n");
return;
}
fprintf(fp, "%s", (const char *) buf->content);
fclose(fp);
xmlBufferFree(buf);
}
void
testXmlwriterDoc(const char *file)
{
int rc;
xmlTextWriterPtr writer;
xmlChar *tmp;
xmlDocPtr doc;
writer = xmlNewTextWriterDoc(&doc, 0);
if (writer == NULL) {
printf("testXmlwriterDoc: Error creating the xml writer\n");
return;
}
rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartDocument\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
tmp = ConvertInput("This is a comment with special chars: <äöü>",
MY_ENCODING);
rc = xmlTextWriterWriteComment(writer, tmp);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
BAD_CAST "1.0");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
BAD_CAST "de");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
return;
}
tmp = ConvertInput("<äöü>", MY_ENCODING);
rc = xmlTextWriterWriteFormatComment(writer,
"This is another comment with special chars: %s",
tmp);
if (rc < 0) {
printf
("testXmlwriterDoc: Error at xmlTextWriterWriteFormatComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
"%010d", 53535L);
if (rc < 0) {
printf
("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
"%d", 1010);
if (rc < 0) {
printf
("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
return;
}
tmp = ConvertInput("Müller", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
tmp = ConvertInput("Jörg", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test>");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
10);
if (rc < 0) {
printf
("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test 2>");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
20);
if (rc < 0) {
printf
("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
BAD_CAST "This is a text.");
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndDocument(writer);
if (rc < 0) {
printf("testXmlwriterDoc: Error at xmlTextWriterEndDocument\n");
return;
}
xmlFreeTextWriter(writer);
xmlSaveFileEnc(file, doc, MY_ENCODING);
xmlFreeDoc(doc);
}
void
testXmlwriterTree(const char *file)
{
int rc;
xmlTextWriterPtr writer;
xmlDocPtr doc;
xmlNodePtr node;
xmlChar *tmp;
doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
if (doc == NULL) {
printf
("testXmlwriterTree: Error creating the xml document tree\n");
return;
}
node = xmlNewDocNode(doc, NULL, BAD_CAST "EXAMPLE", NULL);
if (node == NULL) {
printf("testXmlwriterTree: Error creating the xml node\n");
return;
}
xmlDocSetRootElement(doc, node);
writer = xmlNewTextWriterTree(doc, node, 0);
if (writer == NULL) {
printf("testXmlwriterTree: Error creating the xml writer\n");
return;
}
rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartDocument\n");
return;
}
tmp = ConvertInput("This is a comment with special chars: <äöü>",
MY_ENCODING);
rc = xmlTextWriterWriteComment(writer, tmp);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterWriteComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
BAD_CAST "1.0");
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
return;
}
rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
BAD_CAST "de");
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
return;
}
tmp = ConvertInput("<äöü>", MY_ENCODING);
rc = xmlTextWriterWriteFormatComment(writer,
"This is another comment with special chars: %s",
tmp);
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteFormatComment\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
"%010d", 53535L);
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
"%d", 1010);
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
return;
}
tmp = ConvertInput("Müller", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
tmp = ConvertInput("Jörg", MY_ENCODING);
rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
return;
}
if (tmp != NULL) xmlFree(tmp);
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test>");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
10);
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
BAD_CAST "<Test 2>");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
20);
if (rc < 0) {
printf
("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
return;
}
rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
BAD_CAST "This is a text.");
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
return;
}
rc = xmlTextWriterEndElement(writer);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
return;
}
rc = xmlTextWriterEndDocument(writer);
if (rc < 0) {
printf("testXmlwriterTree: Error at xmlTextWriterEndDocument\n");
return;
}
xmlFreeTextWriter(writer);
xmlSaveFileEnc(file, doc, MY_ENCODING);
xmlFreeDoc(doc);
}
xmlChar *
ConvertInput(const char *in, const char *encoding)
{
xmlChar *out;
int ret;
int size;
int out_size;
int temp;
xmlCharEncodingHandlerPtr handler;
if (in == 0)
return 0;
handler = xmlFindCharEncodingHandler(encoding);
if (!handler) {
printf("ConvertInput: no encoding handler found for '%s'\n",
encoding ? encoding : "");
return 0;
}
size = (int) strlen(in) + 1;
out_size = size * 2 - 1;
out = (unsigned char *) xmlMalloc((size_t) out_size);
if (out != 0) {
temp = size - 1;
ret = handler->input(out, &out_size, (const xmlChar *) in, &temp);
if ((ret < 0) || (temp - size + 1)) {
if (ret < 0) {
printf("ConvertInput: conversion wasn't successful.\n");
} else {
printf
("ConvertInput: conversion wasn't successful. converted: %i octets.\n",
temp);
}
xmlFree(out);
out = 0;
} else {
out = (unsigned char *) xmlRealloc(out, out_size + 1);
out[out_size] = 0;
}
} else {
printf("ConvertInput: no mem\n");
}
return out;
}
#else
int main(void) {
fprintf(stderr, "Writer or output support not compiled in\n");
exit(1);
}
#endif