VC使用MSXML解析XML文档,例子代码

现在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。

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

对于这一种SAX解析的模式有一些不太了解如何应用。只是感觉这种方式可能不太好用于那种

对结构很重要的xml文档的解析 。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值