Posted on 2008-12-16 16:29
天之骄子 阅读(415)
评论(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>