TinyXML是一个优秀的C++ XML解析器。TinyXML http://sourceforge.net/projects/tinyxml
使用方法
生成一个简单的xml文件
<?xml version="1.0" ?>
<Hello>World</Hello>
#include <iostream>
#include <tinyxml.h>
using namespace std;
int main()
{
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
doc.LinkEndChild( decl );
TiXmlElement * element = new TiXmlElement( "Hello" );
doc.LinkEndChild( element );
TiXmlText * text = new TiXmlText( "World" );
element->LinkEndChild( text );
doc.SaveFile( "madeByHand.xml" );
return 0;
}
打开文件遍历元素
example4.xml
<?xml version="1.0" ?>
<MyApp>
<!-- Settings for MyApp -->
<Messages>
<Welcome>Welcome to MyApp</Welcome>
<Farewell>Thank you for using MyApp</Farewell>
</Messages>
<Windows>
<Window name="MainFrame" x="5" y="15" w="400" h="250" />
</Windows>
<Connection ip="192.168.0.1" timeout="123.456000" />
</MyApp>
void IterateXmlNode()
{
TiXmlDocument doc("example4.xml");
if (!doc.LoadFile())
return;
TiXmlElement* root = doc.FirstChildElement();
if (root == nullptr)
return;
TiXmlElement* messages = root->FirstChildElement("Messages");
if (messages == nullptr)
return;
TiXmlNode* message = nullptr;
for (message = messages->FirstChild(); message; message = message->NextSibling())
{
if (message->Type() == TiXmlNode::TINYXML_ELEMENT)
{
cout << message->Value() << ": ";
TiXmlNode* text = message->FirstChild();
if (text)
cout << text->Value() << endl;
}
}
// TiXmlNode* message = nullptr;
// while (message = messages->IterateChildren(message))
// {
// if (message->Type() == TiXmlNode::TINYXML_ELEMENT)
// {
// cout << message->Value() << ": ";
// TiXmlNode* text = message->FirstChild();
// if (text)
// cout << text->Value() << endl;
// }
// }
}
上面一段代码中,注释部分演示了另外一种遍历方法。
使用TiXmlHandle
通过上面的代码我们看到,获得一个元素后需要判断是否为空指针。使用TiXmlHandle可以简化编程,使用链式调用的简便语法,效果如下:
void UsingTiXmlHandle()
{
TiXmlDocument doc("example4.xml");
if (!doc.LoadFile())
return;
TiXmlHandle root(&doc);
TiXmlText* text = root.FirstChild("MyApp").FirstChild("Messages").FirstChild().FirstChild().ToText();
if (text)
cout << text->Value() << endl;
}
总结
TinyXML的使用方法还是相当简单的。源代码只有6个文件,看一下头文件,各种接口一目了然。