main.cpp
#include <stdio.h>
#include <windows.h>
#include <tinyxml.h>
#pragma comment (lib,"tinyxmld.lib")
const unsigned int NUM_INDENTS_PER_SPACE=2;
const char* getIndent (unsigned int numIndents)
{
static const char* pINDENT="+";
static const unsigned int LENGTH=strlen(pINDENT);
unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;
if (n>LENGTH)
{
n=LENGTH;
}
return &pINDENT[LENGTH-n];
}
const char* getIndentAlt(unsigned int numIndents)
{
static const char* pINDENT=" ";
static const unsigned int LENGTH=strlen(pINDENT);
unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;
if (n>LENGTH)
{
n=LENGTH;
}
return &pINDENT[LENGTH-n];
}
int dump_attribs_to_stdout(TiXmlElement* pElement,unsigned int indent)
{
assert(pElement);
if (pElement==NULL) return 0;
int i=0,ival=0;
double dval=0;
const char* pIndent=getIndentAlt(indent);
TiXmlAttribute* pAttrib=pElement->FirstAttribute();
while(pAttrib)
{
printf("%s%s: value[%s]",pIndent,pAttrib->Name(),pAttrib->Value());
if (pAttrib->QueryIntValue(&ival)==TIXML_SUCCESS)
{
printf("int=%d",ival);
}
if (pAttrib->QueryDoubleValue(&dval)==TIXML_SUCCESS)
{
printf("d=%1.1f",dval);
}
printf("\n");
i++;
pAttrib=pAttrib->Next();
}
return i;
}
void dump_to_stdout(TiXmlNode* pParnet,unsigned int indent=0)
{
assert(pParnet);
if (pParnet==NULL)return;
TiXmlNode* pChild=NULL;
TiXmlText* pText=NULL;
int t=pParnet->Type();
printf("%s\n",getIndent(indent));
int num=0;
switch(t)
{
case TiXmlNode::DOCUMENT:
{
printf("Document");
}
break;
case TiXmlNode::ELEMENT:
{
printf("Element [%s]",pParnet->Value());
num=dump_attribs_to_stdout(pParnet->ToElement(),indent+1);
switch(num)
{
case 0: printf("No attributes\n");break;
case 1: printf("%s1 attoribute\n",getIndentAlt(indent));break;
default:printf("%s%d attributes",getIndentAlt(indent),num);break;
}
}
break;
case TiXmlNode::COMMENT:
{
printf("Comment: [%s]",pParnet->Value());
}
break;
case TiXmlNode::UNKNOWN:
{
printf("Unknown");
}
break;
case TiXmlNode::TEXT:
{
pText=pParnet->ToText();
printf("Text: [%s]",pText->Value());
}
break;
case TiXmlNode::DECLARATION:
{
printf("Declaration");
}
break;
default:
break;
}
printf("\n");
for (pChild=pParnet->FirstChild();pChild!=0;pChild=pChild->NextSibling())
{
dump_to_stdout(pChild,indent+1);
}
}
void dump_to_stdout(const char* pFileName)
{
TiXmlDocument doc(pFileName);
bool loadOkay=doc.LoadFile();
if (loadOkay)
{
printf("%s\n",pFileName);
dump_to_stdout(&doc);
}
else
{
printf("Failed to load file %s\n",pFileName);
}
}
int main (void)
{
dump_to_stdout(TEXT("1.xml"));
getchar();
return 0;
}