Printing XML string With XML tags

J

Joah Senegal

Hello all,

I;m a beginner with XML. All I want is to print the XML string with tags. In
the following example, there is function called: xmlNodeGetString. This
function is getting a char* back. The result of this function is the XML
elements of the list without tags (Jaap, Kees, Kris). at the end of this
example a function xmlSaveFormatFile writes a XML file. looking like:

<?xml version="1.0"?>
<LinkedList><Element>Jaap</Element><Element>Kees</Element><Element>Kris</Element></LinkedList>

So what I want to do is writing the lines normally writting in the file on
the screen using printf. So if I do a printf I need to get something like:

<?xml version="1.0"?>
<LinkedList>
<Element>Jaap</Element>
<Element>Kees</Element>
<Element>Kris</Element>
</LinkedList>

I;ve searched for xmlfunctions for this, but I'm failing to find the right
one. Does anyone know how to get a output like above? I want do something
like this:

char *fname ;
for ( ; p ; p = p->next ) {
if (p->type == XML_ELEMENT_NODE) {
fname = (char *)SOMEXMLFUNCTION(.........) }
printf (fname);
}

In the place om SOMEXMLFUNCTION should me a xmlfunction that spits out
things like this:

<Element>Jaap</Element>





------example----
#include <iostream>

#include <libxml/parser.h>

using namespace std ;

int main() {

xmlNode *xNode ;
xmlDocPtr doc ;

doc = xmlNewDoc(BAD_CAST "1.0");

xNode = xmlNewNode(NULL, BAD_CAST "LinkedList");
xmlDocSetRootElement(doc, xNode);

xmlNewChild(xNode,NULL,(xmlChar *)"Element", (xmlChar *)"Jaap" ) ;
xmlNewChild(xNode,NULL,(xmlChar *)"Element", (xmlChar *)"Kees" ) ;
xmlNewChild(xNode,NULL,(xmlChar *)"Element", (xmlChar *)"Kris" ) ;


xmlNode * p = xNode->children ;

char *fname ;
for ( ; p ; p = p->next ) {
if (p->type == XML_ELEMENT_NODE) {
fname = (char *)xmlNodeListGetString(p->doc,
p->xmlChildrenNode, 1);
}

cout << fname << endl ;
}

xmlSaveFormatFile ("LinkedList.xml", doc, 0);
xmlFreeDoc(doc);


}
 
C

Christopher

Hello all,

I;m a beginner with XML. All I want is to print the XML string with tags. In
the following example, there is function called: xmlNodeGetString. This
function is getting a char* back. The result of this function is the XML
elements of the list without tags (Jaap, Kees, Kris). at the end of this
example a function xmlSaveFormatFile writes a XML file. looking like:

<?xml version="1.0"?>
<LinkedList><Element>Jaap</Element><Element>Kees</Element><Element>Kris</Element></LinkedList>

So what I want to do is writing the lines normally writting in the file on
the screen using printf. So if I do a printf I need to get something like:

<?xml version="1.0"?>
<LinkedList>
<Element>Jaap</Element>
<Element>Kees</Element>
<Element>Kris</Element>
</LinkedList>

I;ve searched for xmlfunctions for this, but I'm failing to find the right
one. Does anyone know how to get a output like above? I want do something
like this:

char *fname ;
for ( ; p ; p = p->next ) {
if (p->type == XML_ELEMENT_NODE) {
fname = (char *)SOMEXMLFUNCTION(.........) }
printf (fname);
}

In the place om SOMEXMLFUNCTION should me a xmlfunction that spits out
things like this:

<Element>Jaap</Element>

------example----
#include <iostream>

#include <libxml/parser.h>

using namespace std ;

int main() {

xmlNode *xNode ;
xmlDocPtr doc ;

doc = xmlNewDoc(BAD_CAST "1.0");

xNode = xmlNewNode(NULL, BAD_CAST "LinkedList");
xmlDocSetRootElement(doc, xNode);

xmlNewChild(xNode,NULL,(xmlChar *)"Element", (xmlChar *)"Jaap" ) ;
xmlNewChild(xNode,NULL,(xmlChar *)"Element", (xmlChar *)"Kees" ) ;
xmlNewChild(xNode,NULL,(xmlChar *)"Element", (xmlChar *)"Kris" ) ;

xmlNode * p = xNode->children ;

char *fname ;
for ( ; p ; p = p->next ) {
if (p->type == XML_ELEMENT_NODE) {
fname = (char *)xmlNodeListGetString(p->doc,
p->xmlChildrenNode, 1);
}

cout << fname << endl ;
}

xmlSaveFormatFile ("LinkedList.xml", doc, 0);
xmlFreeDoc(doc);

}

There is no standard C++ XML library. You will have to use a third
party library or write your own. Luckily there are several. One
popular one is Xerces. I however, would prefer to write my own. The
details of which could fit in a book and are OT here.

You could easily create a string aroudn another string to wrap <> and
</> around it, but that is only one form and element can take. what if
it has children? what if it has attributes? etc etc. You get into a
complicated tree structure and lots of decision making.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,817
Latest member
DicWeils

Latest Threads

Top