(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
>