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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |