用MSXML解析XML文档

(1)源XML文档(xmlfile.xml)如下:

  

1 <? xml version="1.0" encoding="GB2312" ?>
2 < Device  id ="10041"  name ="设备1" >
3 < Type > 13 </ Type >
4 < TypeName > 保护 </ TypeName >
5 </ Device >

 

   我们在源文档中查找"Device",将其"name"属性设置为"测试设备",为其添加"Model"节点,并设置其文本为"3"。

(2)源程序如下:

  

 1      CoInitialize(NULL);  //  初始化COM。
 2     CComPtr < IXMLDOMDocument >  spXMLDOM;
 3     HRESULT hr = spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));
 4      //  创建解析器实例。
 5     VARIANT_BOOL bSuccess = false ;
 6     hr = spXMLDOM -> load(CComVariant(L " xmlfile.xml " ), & bSuccess);
 7      //  装载XML文档。
 8     CComBSTR bstrSS(L " Device " );
 9     CComPtr < IXMLDOMNode >  spDevice;
10     hr = spXMLDOM -> selectSingleNode(bstrSS, & spDevice);  // 搜索"Device"。
11     CComQIPtr < IXMLDOMElement >  spDev;
12     spDev = spDevice;
13      //  设置"Device"的"name"属性。
14     hr =  spDev  -> setAttribute(CComBSTR(L " name " ),CComVariant( " 测试设备 " ));
15     CComPtr < IXMLDOMNode >  spModelNode; hr = spXMLDOM -> createNode(CComVariant(NODE_ELEMENT),ComBSTR
16     ( " Model " ),NULL, &  spModelNode);  //  创建"Model"节点。
17     CComPtr < IXMLDOMNode >  spInsertedNode;
18     hr = spDevice -> appendChild (spModelNode, & spInsertedNode);
19      //  添加新节点到"Device"节点下面。
20     CString strID = " 3 " ;
21     hr = spInsertedNode -> put_text(strID.AllocSysString()); //  设置"Model"的文本。
22     hr = spXMLDOM -> save(CComVariant( " xmlfile.xml " ));  /   / 保存文档。
23     CoUninitialize();  //  结束对COM的使用。
24 

    因为篇幅的原因,上述代码的每步操作并未对返回的HRESULT类型进行判断,也未进行异常的捕获处理,在实际的编程中读者应根据返回的hr进行决断,以决定程序的流程,同时应进行异常的捕获处理。

  (3) 修改后的XML文档如下

  

1       <? xml version="1.0" encoding="GB2312" ?>
2      < Device  id ="10041"  name ="测试设备" >
3      < Type > 13 </ Type >
4      < TypeName > 保护 </ TypeName >
5      < Model > 3 </ Model >
6      </ Device >

你可能感兴趣的:(用MSXML解析XML文档)