MSXML4.0,全称Microsoft XML Core Services,是微软公司开发的一款用于处理XML文档的COM组件,它提供了一套丰富的API,可以用来解析、创建、修改和查询XML文档,本文将详细介绍如何使用MSXML4.0。
我们需要在项目中引入MSXML4.0的库文件,在Visual Studio中,可以通过以下步骤来添加MSXML4.0的引用:
1、打开你的项目,点击“项目”菜单,然后选择“添加引用”。
2、在弹出的对话框中,选择“浏览”,然后找到MSXML4.0的安装路径,通常在“C:\Program Files (x86)\Microsoft SDKs\Windows\vX.XA\binn\x86”(其中X.XA是你的Visual Studio版本)。
3、在列表中找到“msxml4.dll”文件,选中它,然后点击“确定”。
接下来,我们就可以在代码中使用MSXML4.0了,以下是一些基本的使用方法:
1、创建XML文档:我们可以使用MSXML4.0的DOMDocument对象来创建一个新的XML文档。
IXMLDOMDocumentPtr pDoc = NULL; CoInitialize(NULL); HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument), (void**)&pDoc); if (SUCCEEDED(hr)) { // 创建一个新的XML文档 VARIANT vEmpty; VariantInit(&vEmpty); hr = pDoc->createElement("root", &vEmpty); if (SUCCEEDED(hr)) { // 将新创建的元素添加到文档中 pDoc->appendChild(pDoc->get_documentElement(), vEmpty, &vEmpty); } }
2、加载和保存XML文档:我们可以使用MSXML4.0的IXMLDOMDocument对象的load和save方法来加载和保存XML文档。
IXMLDOMDocumentPtr pDoc = NULL; CoInitialize(NULL); HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument), (void**)&pDoc); if (SUCCEEDED(hr)) { // 加载一个XML文档 BSTR bstrFileName = SysAllocString(L"test.xml"); hr = pDoc->load(bstrFileName); SysFreeString(bstrFileName); if (SUCCEEDED(hr)) { // 保存修改后的文档 bstrFileName = SysAllocString(L"test_modified.xml"); hr = pDoc->save(bstrFileName); SysFreeString(bstrFileName); } }
3、查询和修改XML文档:我们可以使用MSXML4.0的IXMLDOMDocument对象的selectNodes和selectSingleNode方法来查询和修改XML文档。
IXMLDOMDocumentPtr pDoc = NULL; CoInitialize(NULL); HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument), (void**)&pDoc); if (SUCCEEDED(hr)) { // 加载一个XML文档 BSTR bstrFileName = SysAllocString(L"test.xml"); hr = pDoc->load(bstrFileName); SysFreeString(bstrFileName); if (SUCCEEDED(hr)) { // 查询所有的元素节点 IXMLDOMNodeListPtr pNodeList = NULL; hr = pDoc->selectNodes(__uuidof(IXMLDOMNodeList), (void**)&pNodeList); if (SUCCEEDED(hr)) { // 遍历所有元素节点并打印其名称和值 long lCount; pNodeList->get_length(&lCount); for (long i = 0; i < lCount; i++) { IXMLDOMNodePtr pNode = NULL; pNodeList->item(i, &pNode); BSTR bstrName = NULL; BSTR bstrValue = NULL; pNode->get_nodeName(&bstrName); pNode->get_text(&bstrValue); printf("%s: %s ", bstrName, bstrValue); SysFreeString(bstrName); SysFreeString(bstrValue); } pNodeList->Release(); } } }