TinyXMLの簡単な生成と解析の例
7360 ワード
#include
#include
using namespace std;
#include "../tinyxml/tinyxml.h"
int test1()
{
TiXmlDocument xml_doc;
/* */
//a
TiXmlElement* xmlElemA = new TiXmlElement("A");
TiXmlText* xmlTextA = new TiXmlText("a");
xmlElemA->LinkEndChild(xmlTextA);
//b
TiXmlElement* xmlElemB = new TiXmlElement("B");
TiXmlText* xmlTextB = new TiXmlText("b");
xmlElemB->LinkEndChild(xmlTextB);
//c
TiXmlElement* xmlElemC = new TiXmlElement("C");
TiXmlText* xmlTextC = new TiXmlText("c");
xmlElemC->LinkEndChild(xmlTextC);
xml_doc.LinkEndChild(xmlElemA);
xml_doc.LinkEndChild(xmlElemB);
xml_doc.LinkEndChild(xmlElemC);
//
xml_doc.SaveFile("abc.xml");
/* */
//
TiXmlDocument xml_doc2;
if (!xml_doc2.LoadFile("abc.xml"))
{
return -1;
}
TiXmlNode* node1 = xml_doc2.FirstChild("A");
TiXmlNode* node2 = xml_doc2.FirstChild("B");
TiXmlNode* node3 = xml_doc2.FirstChild("C");
cout << "node1: " << *node1 << endl;
cout << "node2: " << *node2 << endl;
cout << "node3: " << *node3 << endl;
return 0;
}
int main()
{
test1();
return 0;
}
生成されたXMLファイルは次のとおりです.
a
b
c
一般的な操作:
#include "tinyxml.h"
#include
using namespace std;
TiXmlDocument *pDoc =NULL;
void write_xml( )/* XMl */
{
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
doc.LinkEndChild( decl );
TiXmlElement * element1 = new TiXmlElement( "AMULE_ToDL" );// element1
element1->SetAttribute("num",5);
doc.LinkEndChild( element1 );
// TiXmlText * text = new TiXmlText( "World" );//
// element->LinkEndChild( text );//
TiXmlElement * element11 = new TiXmlElement( "name" );
element11->SetAttribute("name","GongFong.rmvb");
element1->LinkEndChild( element11 );// element11 element1 ( )
TiXmlElement * element2 = new TiXmlElement( "BT_ToDL" );
element2->SetAttribute("num",10);//
doc.LinkEndChild(element2);
//dump_to_stdout(&doc);
doc.SaveFile( "1.xml" );
}
void dump_to_stdout( TiXmlNode* pParent )//Tixml
{
if ( !pParent ) return;
TiXmlNode* pChild;
TiXmlText* pText;
int t = pParent->Type();
printf( "type %d/n", t);
int num;
switch ( t )
{
case TiXmlNode::DOCUMENT:
printf( "Document" );
break;
case TiXmlNode::ELEMENT:
printf( "Element [%s]", pParent->Value() );
num=dump_attribs_to_stdout(pParent->ToElement(), indent+1);
switch(num)
{
case 0: printf( " (No attributes)"); break;
case 1: printf( "%s1 attribute", getIndentAlt(indent)); break;
default: printf( "%s%d attributes", getIndentAlt(indent), num); break;
}
break;
case TiXmlNode::COMMENT:
printf( "Comment: [%s]", pParent->Value());
break;
case TiXmlNode::UNKNOWN:
printf( "Unknown" );
break;
case TiXmlNode::TEXT:
pText = pParent->ToText();
printf( "Text: [%s]", pText->Value() );
break;
case TiXmlNode::DECLARATION:
printf( "Declaration" );
break;
default:
break;
}
printf( "/n" );
for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())
{
dump_to_stdout( pChild );
}
}
void search(TiXmlNode* pParent)// , , ChildNode
{
if ( !pParent ) return;
TiXmlNode* pChild= NULL;
int t = pParent->Type();//
if (TiXmlNode::ELEMENT == t && (strcmp("Welcome",pParent->Value()) == 0))// "Welcome"
{
printf("value %s/n",pParent->Value());//
pParent->SetValue("re-write");//
pParent->ToElement()->SetAttribute("hello",20);
TiXmlElement * element1 = new TiXmlElement( "AMULE_ToDL" );//
element1->SetAttribute("num",5);
pParent->LinkEndChild(element1);
pDoc->SaveFile(); //
}
printf( "/n" );
for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())
{
search(pChild);
}
}
void search2(TiXmlNode* pParent)// :
{
if ( !pParent ) return;
TiXmlNode* pChild= NULL;
TiXmlNode*tmp = NULL;
int t = pParent->Type();
tmp = pParent->FirstChild("Window");// "Window"
if(tmp){
//pParent->RemoveChild(tmp);//
TiXmlElement * element1 = new TiXmlElement( "AMULE_ToDL" );
element1->SetAttribute("num",5);
pParent->ReplaceChild(tmp,*element1);// "AMULE_ToDL"
}
pDoc->SaveFile(); //
printf( "/n" );
for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) // , sibling ,
// FirstChild() NextSibling()
{
search2(pChild);//
}
}
int main(int argc, char* argv[])
{
TiXmlDocument doc(argv[1]);
bool loadOkay = doc.LoadFile();
if (loadOkay)
{
pDoc = &doc;
printf("/n%s:/n", argv[1]);
//dump_to_stdout( &doc ); // defined later in the tutorial
search2(&doc); // TiXmlDocument TiXmlNode
}
else
{
printf("Failed to load file /"%s/"/n", argv[1]);
}
return 0;
}
/*void dump_to_stdout1(const char* pFilename)
{
TiXmlDocument doc(pFilename);
bool loadOkay = doc.LoadFile();
if (loadOkay)
{
printf("/n%s:/n", pFilename);
dump_to_stdout( &doc ); // defined later in the tutorial
}
else
{
printf("Failed to load file /"%s/"/n", pFilename);
}
int main(int argc, char* argv[])
{
for (int i=1; i