两种在Tinyxml中查找元素的方法,对应两种不同的XML文件格式。 test2.xml文件: view plaincopy to clipboardprint? ------------------------------------------------------------------------------------------------------------------------ <?xml version="1.0" encoding="UTF-8"?> <document> <English name="MY" value="UTF32">The world has many languages</English> <Button name="OK_btn" x = "20" y = "77">OK</Button> </document> ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------ <?xml version="1.0" encoding="UTF-8"?> <document> <English name="MY" value="UTF32">The world has many languages</English> <Button name="OK_btn" x = "20" y = "77">OK</Button> </document> ------------------------------------------------------------------------------------------------------------------------- cpp代码: view plaincopy to clipboardprint? #include "../Tinyxml/tinyxml.h" #include <iostream> #include <string> int main(void) { TiXmlDocument doc( "test2.xml"); doc.LoadFile(); TiXmlHandle docH( &doc ); TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Button" ).Element(); std::cout<<"<"<<element->Value()<<">"<<std::endl; std::cout<<" name = "<<element->Attribute( "name" )<<std::endl; std::cout<<" x = "<< element->Attribute( "x" )<<std::endl; std::cout<<" y = "<< element->Attribute( "y" )<<std::endl; std::cout<<" Text = "<<element->GetText()<<std::endl; getchar(); return 0; } #include "../Tinyxml/tinyxml.h" #include <iostream> #include <string> int main(void) { TiXmlDocument doc( "test2.xml"); doc.LoadFile(); TiXmlHandle docH( &doc ); TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Button" ).Element(); std::cout<<"<"<<element->Value()<<">"<<std::endl; std::cout<<" name = "<<element->Attribute( "name" )<<std::endl; std::cout<<" x = "<< element->Attribute( "x" )<<std::endl; std::cout<<" y = "<< element->Attribute( "y" )<<std::endl; std::cout<<" Text = "<<element->GetText()<<std::endl; getchar(); return 0; } 这里的element 指针就是当前我们操作的指针,通过docH.FirstChildElement( "document" ).FirstChildElement( "Button" ).Element();方法我们获取了要寻找的Button这个元素的指针,然后它的元素就可以通过element->Attribute( "name" );element->Attribute( "x" )来得到了,使用非常方便。 test.xml文件: view plaincopy to clipboardprint? ------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <persons> <student> <stu_name>hami</stu_name> <stu_age>15</stu_age> <stu_sex>男</stu_sex> </student> <teacher> <tea_name>alin</tea_name> <tea_age>16</tea_age> <tea_sex>女</tea_sex> </teacher> </persons> ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <persons> <student> <stu_name>hami</stu_name> <stu_age>15</stu_age> <stu_sex>男</stu_sex> </student> <teacher> <tea_name>alin</tea_name> <tea_age>16</tea_age> <tea_sex>女</tea_sex> </teacher> </persons> ------------------------------------------------------------------------------------------------------------------------- cpp代码: view plaincopy to clipboardprint? #pragma comment(lib,"tinyxml.lib") #include "tinyxml.h" #include <iostream> #include <string> #define TIXML_USE_STL int main(void) { TiXmlDocument *personDoc = new TiXmlDocument; personDoc->LoadFile("test.xml"); TiXmlElement *personElement = personDoc->RootElement(); std::cout<<personElement->Value()<<std::endl; TiXmlElement *student = personElement->FirstChildElement(); std::cout<<" "<<student->Value()<<std::endl; TiXmlElement *nameElement = student->FirstChildElement(); std::cout<<" "<<nameElement->Value();//<<std::endl; //std::cout<<" "<<nameElement->GetText()<<std::endl; TiXmlElement *ageElement = nameElement->NextSiblingElement(); std::cout<<" "<<ageElement->Value()<<std::endl; TiXmlElement *sexElement = ageElement->NextSiblingElement(); std::cout<<" "<<sexElement->Value()<<std::endl; TiXmlElement *teacher = student->NextSiblingElement(); std::cout<<" "<<teacher->Value()<<std::endl; TiXmlElement *teaNameElement = teacher->FirstChildElement(); std::cout<<" "<<teaNameElement->Value()<<std::endl; TiXmlElement *teaAgeElement = teaNameElement->NextSiblingElement(); std::cout<<" "<<teaAgeElement->Value()<<std::endl; TiXmlElement *teaSexElement = teaAgeElement->NextSiblingElement(); std::cout<<" "<<teaSexElement->Value()<<std::endl; return 0; } #pragma comment(lib,"tinyxml.lib") #include "tinyxml.h" #include <iostream> #include <string> #define TIXML_USE_STL int main(void) { TiXmlDocument *personDoc = new TiXmlDocument; personDoc->LoadFile("test.xml"); TiXmlElement *personElement = personDoc->RootElement(); std::cout<<personElement->Value()<<std::endl; TiXmlElement *student = personElement->FirstChildElement(); std::cout<<" "<<student->Value()<<std::endl; TiXmlElement *nameElement = student->FirstChildElement(); std::cout<<" "<<nameElement->Value();//<<std::endl; //std::cout<<" "<<nameElement->GetText()<<std::endl; TiXmlElement *ageElement = nameElement->NextSiblingElement(); std::cout<<" "<<ageElement->Value()<<std::endl; TiXmlElement *sexElement = ageElement->NextSiblingElement(); std::cout<<" "<<sexElement->Value()<<std::endl; TiXmlElement *teacher = student->NextSiblingElement(); std::cout<<" "<<teacher->Value()<<std::endl; TiXmlElement *teaNameElement = teacher->FirstChildElement(); std::cout<<" "<<teaNameElement->Value()<<std::endl; TiXmlElement *teaAgeElement = teaNameElement->NextSiblingElement(); std::cout<<" "<<teaAgeElement->Value()<<std::endl; TiXmlElement *teaSexElement = teaAgeElement->NextSiblingElement(); std::cout<<" "<<teaSexElement->Value()<<std::endl; return 0; } 这里主要使用了NextSiblingElement()这个函数,指向了下一个兄弟节点,这种操作能够得到下一个兄弟节点的指针,而无需知道兄弟节点的任何其他信息。但是第一种方法, 例如在TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Button" ).Element();的操作作中,就必须知道"document"、"Button"等信息。 编辑子节点 你可以插入、删除替换所有的子节点。 TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); 上面三个函数用于插入节点,InsertEndChild函数让你把新节点插入到末尾,InsertBeforeChild和InsertAfterChild函数允许你在指定的节点位置前后插入节点。 TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); ReplaceChild函数用于替换指定的节点。 bool RemoveChild( TiXmlNode* removeThis ); void Clear(); RemoveChild函数让你删除指定的节点。 Clear函数会删除本节点的所有子节点(包括子节点包含的从子节点),但不会修改本节点。 本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/nieyong2010/archive/2010/01/22/5224243.aspx#