四、程序实现
下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档。
(1)源XML文档(xmlfile.xml)如下:
<?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="设备1"> <Type>13</Type> <TypeName>保护</TypeName> </Device> |
我们在源文档中查找"Device",将其"name"属性设置为"测试设备",为其添加"Model"节点,并设置其文本为"3"。
(2)源程序如下:
CoInitialize(NULL); // 初始化COM。 CComPtr<IXMLDOMDocument> spXMLDOM; HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument)); // 创建解析器实例。 VARIANT_BOOL bSuccess=false; hr=spXMLDOM->load(CComVariant(L"xmlfile.xml"),&bSuccess); // 装载XML文档。 CComBSTR bstrSS(L"Device"); CComPtr<IXMLDOMNode> spDevice; hr=spXMLDOM->selectSingleNode(bstrSS,&spDevice); //搜索"Device"。 CComQIPtr<IXMLDOMElement> spDev; spDev=spDevice; // 设置"Device"的"name"属性。 hr= spDev ->setAttribute(CComBSTR(L"name"),CComVariant("测试设备")); CComPtr<IXMLDOMNode> spModelNode; hr=spXMLDOM->createNode(CComVariant(NODE_ELEMENT),ComBSTR ("Model"),NULL,& spModelNode); // 创建"Model"节点。 CComPtr<IXMLDOMNode> spInsertedNode; hr=spDevice->appendChild (spModelNode,&spInsertedNode); // 添加新节点到"Device"节点下面。 CString strID="3"; hr=spInsertedNode->put_text(strID.AllocSysString());// 设置"Model"的文本。 hr=spXMLDOM->save(CComVariant("xmlfile.xml")); / /保存文档。 CoUninitialize(); // 结束对COM的使用。 |
因为篇幅的原因,上述代码的每步操作并未对返回的HRESULT类型进行判断,也未进行异常的捕获处理,在实际的编程中读者应根据返回的hr进行决断,以决定程序的流程,同时应进行异常的捕获处理。
(3) 修改后的XML文档如下
<?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="测试设备"> <Type>13</Type> <TypeName>保护</TypeName> <Model>3</Model> </Device> |
五、结束语
因为XML文档有着比HTML更严格的语法要求,所以使用和编写一个XML解析器要比编写一个HTML解析器要容易得多。同时因为XML文档不仅可以 标记文档的显示属性,更重要的是它标记了文档的结构和包含信息的特征,所以我们可以方便地通过XML解析器来获取特定节点的信息并加以显示或修改,方便了 用户对XML文档的操作和维护。同时我们需要注意的是,XML是一种开放的结构体系,并不依赖于任何一家公司,所以开发基于XML的应用必然会得到绝大多 数软件开发平台的支持。 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |