• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++解析xml文档或者xml字符串方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
由于在javascript中不存在指针概念,故在xml页面调用OCX控件时,以前控件中的输出参数通过指针返回在这样的情况下行不通了,但本来就有返回参数,以及在同时有多个输出参数的情况下,依然想通过返回值返回,那就需要进行处理,然而怎么去处理呢?通过研究发现通过xml形式的字符串返回是一种解决方案,在解决这样的返回值的同时突然发现其实如果输入参数是结构体的话,也可以通过xml字符串的形式传入。然而怎么去解析它呢,而又怎么去做一个xml字符串呢,通过研究学习,以下是当然已有的解决方案。
开发环境:VS2010
    一、解析xml文件:

假如已存在一个xml文件classfile.xml


#import "msxml3.dll"
using namespace MSXML2;
void CannilyxmlDlg::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 MSXML2::IXMLDOMDocumentPtr xmldoc;
 HRESULT hr;
 hr = CoInitialize(NULL);//必须初始化,否则后面的CreateInstance创建文档要失败
 if(FAILED (hr))//此处最好用FAILED或者SUCCEEDED来判断,否则可能引起未知错误
 {
  MessageBox("初始化COM失败");
 }
 else
 {
  MessageBox("初始化COM成功");
 }
 hr = xmldoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
 if(FAILED (hr))
 {
  MessageBox("创建xml文档对象失败");
 }
 else
 {
  MessageBox("创建xml文档对象成功");
 }
 xmldoc->load("classfile.xml");//此语句非常非常重要,和解析xml字符串语句只有点点区别,但引起的错误却是千差万别
 MSXML2::IXMLDOMElementPtr root;
 MSXML2::IXMLDOMNodeListPtr nodelist;
 MSXML2::IXMLDOMNodeListPtr childnodelist;
 root = xmldoc->GetdocumentElement();
 nodelist = root->GetchildNodes();
 MSXML2::IXMLDOMNodePtr node;
 MSXML2::IXMLDOMNodePtr childnode;
 for(int i=0;i<nodelist->length;i++)
 {
  node = nodelist->Getitem(i);
  childnodelist = node->GetchildNodes();
  for(int j=0;j<childnodelist->length;j++)
  {
   childnode = childnodelist->Getitem(i);
   MessageBox(childnode->Gettext());
  }
 }
 ::CoUninitialize();
}


二、解析xml字符串 
 调用端:
void xmld()
{
    char *info = "<?xml version = '1.0'?>\n\
    <Video>\n\    
    <data>12</data>\n\    
    </Video>" ;//传入一个xml形式的字符串
     BSTR mation = _bstr_t(info);//将上述指针类型字符串 转化为BSTR类型
    RealPlay(mation); //调用函数,传入一个字符类型参数                        

被调用端:
#import "msxml3.dll"
using namespace MSXML2;
void RealPlay(LPCTSTR msg)
{
 // TODO: 在此添加控件通知处理程序代码
 MSXML2::IXMLDOMDocumentPtr xmldoc;
 HRESULT hr;
 hr = CoInitialize(NULL);//必须初始化,否则后面的CreateInstance创建文档要失败
 if(FAILED (hr))//此处最好用FAILED或者SUCCEEDED来判断,否则可能引起未知错误
 {
  MessageBox("初始化COM失败");
 }
 else
 {
  MessageBox("初始化COM成功");
 }
 hr = xmldoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
 if(FAILED (hr))
 {
  MessageBox("创建xml文档对象失败");
 }
 else
 {
  MessageBox("创建xml文档对象成功");
 }
 xmldoc->loadXML(msg);//此语句非常非常重要,和解析xml文件语句只有点点区别,但引起的错误却是千差万别
 MSXML2::IXMLDOMElementPtr root;
 MSXML2::IXMLDOMNodeListPtr nodelist;
 MSXML2::IXMLDOMNodeListPtr childnodelist;
 root = xmldoc->GetdocumentElement();
 nodelist = root->GetchildNodes();
 MSXML2::IXMLDOMNodePtr node;
 MSXML2::IXMLDOMNodePtr childnode;
 for(int i=0;i<nodelist->length;i++)
 {
  node = nodelist->Getitem(i);
  childnodelist = node->GetchildNodes();
  for(int j=0;j<childnodelist->length;j++)
  {
   childnode = childnodelist->Getitem(i);
   MessageBox(childnode->Gettext());
  }
 }
 ::CoUninitialize();
} 



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
XML编码utf-8有中文无法解析或乱码C#发布时间:2022-07-13
下一篇:
C#中的Escape()和Unescape()发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap