I like libxml . Here is a usage example:
#include <libxml/parser.h> int main(void) { xmlNodePtr root, node; xmlDocPtr doc; xmlChar *xmlbuff; int buffersize; /* Create the document. */ doc = xmlNewDoc(BAD_CAST "1.0"); root = xmlNewNode(NULL, BAD_CAST "root"); /* Create some nodes */ node = xmlNewChild(root, NULL, BAD_CAST "node", NULL); node = xmlNewChild(node, NULL, BAD_CAST "inside", NULL); node = xmlNewChild(root, NULL, BAD_CAST "othernode", NULL); /* Put content in a node: note there are special characters so encoding is necessary! */ xmlNodeSetContent(node, xmlEncodeSpecialChars(doc, BAD_CAST "text con&tent and <tag>")); xmlDocSetRootElement(doc, root); /* Dump the document to a buffer and print it for demonstration purposes. */ xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1); printf((char *) xmlbuff); }
Compiled using 'gcc -Wall -I / usr / include / libxml2 -c create-xml.c && & && & NKU -lxml2 -o create-xml create-xml.o', this program will display:
% ./create-xml <?xml version="1.0"?> <root> <node> <inside/> </node> <othernode>text con&tent and <tag></othernode> </root>
For a real example, see my implementation of RFC 5388 .
source share