利用Tinyxml读取元素,首先我们来看一段xml文件
<?xml version="1.0" standalone="yes" encoding="utf-8"?>
<FileRoot>
<!--Setting for FileRoot-->
<Text1>t1</Text1>
<Text2>t2</Text2>
</FileRoot>
针对这种结构的xml我们怎么读取,如下,我们定义如下数据结构用于存储相应的信息
typedef struct
{
vector<string> v_param;
map<string,string> m_param;
}_STL_1MAP_PARAM,*_pSTL_1MAP_PARAM;
然后我们读取Declaration信息
/*
<?xml version="1.0" encoding="utf-8" tandalone="yes"?>
*/
bool CTinyxmlEngine::Read_XML_Declaration(const char*pszPath,_STL_1MAP_PARAM& m_param)
{
TiXmlDocument doc(pszPath);
if (!doc.LoadFile())
{
return false;
}
TiXmlNode* pFirstNode = doc.FirstChild();
if (pFirstNode!=NULL)
{
TiXmlDeclaration *pXmlDecl = pFirstNode->ToDeclaration();
if (pXmlDecl != NULL)
{
m_param.v_param.push_back("version");
m_param.m_param.insert(make_pair("version",pXmlDecl->Version()));
m_param.v_param.push_back("encoding");
m_param.m_param.insert(make_pair("encoding",pXmlDecl->Encoding()));
m_param.v_param.push_back("standalone");
m_param.m_param.insert(make_pair("standalone",pXmlDecl->Standalone()));
}
}
return true;
}
接下来,我们读取元素信息
/*
<FileRoot>
<Text1>t1</Text1>
<Text2>t2</Text2>
...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_1Floor_Text(const char*pszPath,_STL_1MAP_PARAM&m_param)
{
TiXmlDocument doc(pszPath);
if (!doc.LoadFile())
{
return false;
}
const char*pszXmlName,*pszXmlValue;
TiXmlElement* p_root = doc.RootElement();
for (TiXmlNode* p_node = p_root->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
{
pszXmlName = p_node->Value();
pszXmlValue=p_node->ToElement()->GetText();
if (NULL!=pszXmlValue)
{
m_param.v_param.push_back(pszXmlName);
m_param.m_param.insert(make_pair(pszXmlName,pszXmlValue));
}
}
return true;
}
打印元素值:
void Print_m_param1(_STL_1MAP_PARAM m_param1)
{
vector<string>::iterator it = m_param1.v_param.begin();
for (;it!=m_param1.v_param.end();++it)
{
cout<<*it<<": "<<m_param1.m_param[*it]<<endl;
}
}
函数调用如下:
CTinyxmlEngine m_engine;
_STL_1MAP_PARAM m_param1;
m_engine.Read_XML_1Floor_Text("Test.xml",m_param1);
Print_m_param1(m_param1);
运行结果: