CMarkup与tinyXml直接解析XML字符串
以前都是用CMarkup这个简便的开源码直接解析字符串形式的XML。一般都是先存入一个文件,然后从文件中load(CMarkup可以直接从文件中获取xml档到它自己内部的一个字符串中)。多做了I/O操作,效率不高。今天才知道tinyxml原来也可以直接解析字符串形式的xml。 CMarkup xml; CString str; xml.SetDoc(str); tinyXml也可以直接解析XML字符串,方式如下: //directlyparsingstringwithtinyxml constchar*content="<root><elemname=/"aaa/"/></root>"; TiXmlDocument*doc=newTiXmlDocument(); doc->Parse(content); if(&doc==NULL) cout<<"doc==NULL"<<endl; TiXmlHandledocHandle(doc); TiXmlNode*root=docHandle.FirstChild("root").ToElement(); TiXmlNode*elemNode=root->FirstChild("elem"); TiXmlElement*elemElem=elemNode->ToElement(); cout<<elemElem->Attribute("name"); 结果:aaa
如何把用TiXmlDocument读取的内存中的xml存到string中?
需要下载最新版本的tinyxml,然后使用以下代码
//TiXmlPrinter是继承TiXmlVisitor
// Accept函数原型Accept( TiXmlVisitor* visitor )
TiXmlPrinterprinter;
//TiXmlDocument,TiXmlElement,TiXmlText,TiXmlDeclaration,TiXmlNode 都有Accept 函数,若是TiXmlElement对象调用Accept可以把该元素打印到一个字符串中
doc->Accept(&printer);
strResult.Format("%s",printer.CStr());
这个代码是输出到CString的,楼主修改下改为string就OK啦
tinyxml也是可以直接对xml字串解析的
const char* content = REGEIST_DEVICETYPE; TiXmlHandle docHandle(doc);
tinyxml中对于属性值的修改和text文本的修改
//文本的修改 TiXmlNode* node = daysElement->FirstChild(); TiXmlText newText(“20”); daysElement->ReplaceChild( node,newText ); //属性添加 或修改
tixmlElement->SetAttribute("screening","123");
//保存到文件(记得保存)
myDocument->SaveFile("user.xml");
备注:
在使用tinyxml时,可能会new好多对象,但tinyxml的每个对象,在被释放析构时,会将它下面的所有节点都释放点,如TiXmlDocument 文档对象,我们只需要delete doc即可,若是你还delete pElemRoot; delete pElemData,则在运行时会被二次释放报错。
尽量不要在xml中使用中文TinyXml只认识UTF-8和ISO 8859-1编码,而不知GB2312为何物,但事实上你以GB2312在文档中写入中文,之后可以正确读取,而且文档在记事本中打开也能显示正确的中文,其实这是种巧合,并不是TinyXml支持GB2312了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |