MSXML 解析 XML(收藏)

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 shenghuafen 的 blog

现在xml文档应用的方面特别的多.


我把以前写过的一个例子帖出来,以备以后使用.


第一部分:dom解析:


      概述:dom解析将会把一个完整的xml文档读进来,生成一个结构树。这样会要把xml文档全部都加载到内在中。所以解析起来的速度会要慢一些。



    1、如何加载xml文件:

         //创建dom,加载xml文档
         msxml::ixmldomdocumentptr pcommanddoc;
         pcommanddoc.createinstance(__uuidof(msxml::domdocument));
          pcommanddoc->put_async(variant_false);
          pcommanddoc->put_validateonparse(variant_false);
          pcommanddoc->put_resolveexternals(variant_false);
          pcommanddoc->put_preservewhitespace(variant_true);
          pcommanddoc->load(file.getbuffer(0));

     2、在xml文档中查找指定的结点:

      //找到
     msxml::ixmldomnodeptr prootnode=pcommanddoc->selectsinglenode("root/record");
       if (prootnode==null)
     {
          return ;
      }

    3、得到xml文档中,结点的属性

        cstring strtemp;
     msxml::ixmldomnamednodemapptr pattrs = null;
     prootnode->get_attributes(&pattrs);
     if (pattrs==null)
     {
          return;
     }
     msxml::ixmldomnodeptr prequesttypeattr=pattrs->getqualifieditem("name","");
     _bstr_t strrequesttype=prequesttypeattr->gettext();
     strtemp=strrequesttype.operator char *();

    4、得到结点的内容

    _bstr_t strvisiport=pnode->gettext();

    5、设置结点的内容

     hresult hr=pnode->put_text(_bstr_t(m_strgatewaypassword));


   6、设置一个属性内容
    ixmldomattribute *pa=null;
    bstr = sysallocstring(l"属性1");
    pxmldom->createattribute(bstr,&pnode);
    var = variantstring(l"strin");
    pa->put_value(var);
    proot->setattributenode(pa, &pa1);
   

第二部分、如何使用sax解析

        概述:sax使用的是加载式的,将会把xml文档分断,加载到内存中。使用事件通知的方式,来表示找到结点。好像没有写文档的能力吧。它的速度要比dom快不少。

       使用sax的时候,就需要重载msxml4.0中的一个接口isaxcontenthandler。

      有几个函数重载了之后,当找到了结点之后,就会回调这一些函数。

本文关键:MSXML 解析 XML(收藏)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top