zoukankan      html  css  js  c++  java
  • C++解析xml文档或者xml字符串方法

    由于在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'?>
        <Video>     
        <data>12</data>     
        </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();
    } 


  • 相关阅读:
    RII K25A 语音空中飞鼠 红外学习步骤
    淘宝导航栏颜色修改
    上海巨人网络参与网络诈骗整个流程
    xp的停止更新对我们有什么影响?
    USB3.0 和usb 2.0的区别
    一些有意思的脑际急转弯
    淘宝上 1200左右的组装电脑,真的性价比很高么?
    【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。
    网上下载的“上下3D”和“左右3D”影片该如何播放?
    电脑cmos是什么?和bois的区别?
  • 原文地址:https://www.cnblogs.com/SunkingYang/p/11049258.html
Copyright © 2011-2022 走看看