Tinyxml一一利用tinyxml读取声明对象及一层结点元素

利用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);

运行结果:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值