加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

tinyxml解析内存中的xml字符串

发布时间:2020-12-16 06:31:23 所属栏目:百科 来源:网络整理
导读:在解析http数据时,遇到了一串xml格式的数据。我选择tinyxml来解析xml数据,由于要解析的xml数据是以字符串的形式存放在内存里,并不是以xml文件形式存在,这可花了我一番功夫。 要解析的xml数据如下: string strXml = "?xml version="1.0" ?object stri
在解析http数据时,遇到了一串xml格式的数据。我选择tinyxml来解析xml数据,由于要解析的xml数据是以字符串的形式存放在内存里,并不是以xml文件形式存在,这可花了我一番功夫。

要解析的xml数据如下:

string  strXml = "		
<?xml version="1.0" ?>	
<object>	
    <string name = "id">145678249</string>	
    <object name="attrs">	
        <string name="account">zhou</string>	
        <array name="to">xia</array>	
        <string name="subject">test</string>	
        <string name="content">gan</string>	
    </object>	
</object> ";
对于这种内存中的xml字符串,可以用TiXmlDocument类的Parse()接口来直接解析,如下:

TiXmlDocument *pXml = new TiXmlDocument();
pXml->Parse( strXml.c_str() );
调用Parse()后,xml字符串就被解析成xml文档树,可以直接调用tinyxml的相关接口来进行操作了。比较完整的代码如下:

const char *GetXmlValue(TiXmlHandle *pXmlHandle,char *ElementName,char *ElementAttrName,char *ElementAttrValue)
{
	TiXmlElement *pObjElement = pXmlHandle->FirstChild("object").FirstChild("object").ToElement();
	TiXmlElement *pElement = NULL;
	std::string  strAttrValue;

	for( pElement = pObjElement->FirstChildElement(ElementName); pElement; pElement = pElement->NextSiblingElement(ElementName) )
	{
		//获取当前元素的属性值
		strAttrValue = pElement->Attribute(ElementAttrName);
		if(strAttrValue == ElementAttrValue)
		{
			//获取当前元素的文本内容
			return pElement->GetText();
		}
	}

	return NULL;
}

int main()
{
	TiXmlDocument *pXml = new TiXmlDocument();
	pXml->Parse( strXml.c_str() );
	
	//用TiXmlHandle类来访问Xml文档树(针对xml字符串)
	TiXmlHandle  xmlHandle(pXml); 
	
	//strUser == "zhou"
	string strUser = GetXmlValue(&xmlHandle,"string","name","account");
	//strTo == "xia"
	string strTo = GetXmlValue(&xmlHandle,"to");
	//strSub == "test"
	string strSub = GetXmlValue(&xmlHandle,"subject");
	//strCon == "gan"
	string strCon = GetXmlValue(&xmlHandle,"content");
	
	delete pXml;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读