msXML DOM操作XML文档

以前一直用C#写程序,最近换到C++下 ,习惯了C#的serialization和unserialization,对使用COM操作XML一直比较困惑,经过学习,原来也不过如此,现将简单实用的一些方法记录下来:

创建XML文档

void  Create()  
{
    IXMLDOMDocumentPtr pDoc;  
    HRESULT hr 
=pDoc.CreateInstance(__uuidof(DOMDocument));  
    
if(!SUCCEEDED(hr))  
    
{  
    cout 
<<" Create DOMDocument Failed ,Maybe the msxml Library is not installed!"<<endl;
    
return;
    }
  

    IXMLDOMElementPtr pDocElement
=pDoc->createElement("State");  
    pDoc
->appendChild(pDocElement);  
    cout 
<< "Generate Root:"<< (char*)pDoc->xml << endl;  

    IXMLDOMElementPtr pNewChildElement;  

    pNewChildElement
=pDoc->createElement("Beijing"); //Append Node 
    pNewChildElement->Puttext("BJ");    //Set Text
    pDocElement->appendChild(pNewChildElement);  
    cout 
<< "Append Node:" << (char*)pDoc->xml << endl;  

    pNewChildElement
=pDoc->createElement("Shanxi");  
    pNewChildElement
->Puttext("SX");  
    pNewChildElement
->setAttribute("Resource",_variant_t("Mine"));  //Set Attribute
    pDocElement->appendChild(pNewChildElement);  
    cout 
<< "Append Node With Attribute:" << (char*)pDoc->xml << endl;  

    tmpXML 
= pDoc->xml;    //Save To Globle Variant
    pDoc->save(_variant_t("Test.xml"));    //Save To Disk
    pDocElement->removeChild (pNewChildElement);  
    cout 
<< "Remove Node:" << (char*)pDoc->xml << endl;  
}
  

 加载xml文件

void  Load()  
{  
    IXMLDOMDocumentPtr pDoc;  
    HRESULT hr 
=pDoc.CreateInstance(__uuidof(DOMDocument));  
    
if(!SUCCEEDED(hr))  
    
{  
        cout 
<<" Create DOMDocument Failed ,Maybe the msxml Library is not installed!"<<endl;  
        
return;
    }
  
    pDoc
->loadXML(tmpXML);  
    cout 
<< "Read From Templete:" << (char*)pDoc->xml << endl;  
    IXMLDOMElementPtr pDocElement
=pDoc->GetdocumentElement();  
    
try
    
{
        IXMLDOMElementPtr pElement
=pDocElement->selectSingleNode("Beijing");  
        cout
<<"================================"<<endl;
        cout
<<"Beijing Has Text:"<<(char*)pElement->Gettext()<<endl;    //Read Text
        pElement = pDocElement->selectSingleNode("Shanxi");
        cout
<<"Shanxi Has Text:"<<(char*)pElement->Gettext()<<endl;
        CComVariant varValue 
= pElement->getAttribute("Resource");        //Read Attribute
        if ( varValue.vt ==VT_BSTR )
            cout
<<"Shanxi Has Attribute Resource:"<<(char*)(_bstr_t)(varValue.bstrVal)<<endl;
        
else
            cout
<<"Shanxi Has No Attribute Resource"<<endl;
        cout
<<"================================"<<endl;
        pDocElement
->removeChild(pElement);  
        cout 
<< "Remove Node Beijing:" << (char*)pDoc->xml << endl;
    }

    
catch ( _com_error& e ) 
    
{
        cout
<<(char*)e.Source()<<endl;
    }
  
    
catch (...)
    
{
        cout
<<"UnKnow Error"<<endl;
    }

}
  

 要想程序可以正常运行,必须增加对msxml.dll这个COM的引用,如下代码

#import  " msxml.dll "
#include 
< iostream >
using   namespace  MSXML;
using   namespace  std;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值