笑看风云淡

宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒
posts - 96, comments - 48, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

用MSXML解析XML文档

Posted on 2008-12-16 16:29 天之骄子 阅读(409) 评论(0)  编辑 收藏 引用
(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>

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理