以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 高手帮帮忙:不能够在解析器中装载xML文档[求助] (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=29020) |
-- 作者:data -- 发布时间:3/21/2006 9:15:00 PM -- 高手帮帮忙:不能够在解析器中装载xML文档[求助] 以下程序在VC6.0下面编译没问题,可执行时确总说:"不能够在解析器中装载xML文档" #include <atlbase.h> /*下面的.h文件是在安装了最新的 XML Parser以后所包含的.h文件*/ #include "C:\Program Files\Microsoft XML Parser SDK\inc\msxml2.h" #include <iostream> void main() { // 初始化COM接口 CoInitialize(NULL); /*在程序中,假定装载的XML文件名称为 xmldata.xml,缺省情况下它和可执行文件在同 一个目录中。该文件的内容如下: <?xml version="1.0"?> <xmldata> <xmlnode /> <xmltext>Hello, World!</ xmltext> </xmldata> 程序将寻找名为“xmlnode”的节点,插入一个新的名称为“xmlchildnode”的节点,然后它再去寻找一个名为“xmltext”的节点,然后提取包含在该节点中的文本并显示它,最后它把新的改变过的XML文档保存在名称为“updatexml.xml”的文档中。*/ try { // 通过智能指针创建一个解析器的实例 CComPtr<IXMLDOMDocument>spXMLDOM; HRESULT hr =spXMLDOM.CoCreateInstance(_uuidof(DOMDocument)); if ( FAILED(hr) ) throw "不能创建XML Parser对象"; if ( spXMLDOM.p == NULL ) throw "不能创建XML Parser对象"; // 创建成功,开始装载XML文档 VARIANT_BOOL bSuccess = false; hr =spXMLDOM->load(CComVariant(L"test.xml"),&bSuccess); if ( FAILED(hr) ) throw "不能够在解析器中装载XML文档"; if ( !bSuccess ) throw "不能够在解析器中装载xML文档"; // 检查并搜索"xmldata/xmlnode" CComBSTR bstrSS(L"xmldata/xmlnode"); CComPtr<IXMLDOMNode>spXMLNode; /*用接口IXMLDOMDocument的 selectSingleNode方法定位该节点。*/ hr =spXMLDOM->selectSingleNode (bstrSS,&spXMLNode); if ( FAILED(hr) ) throw "不能在XML节点中定位‘xmlnode’"; if ( spXMLNode.p == NULL ) throw "不能在XML节点中定位‘xmlnode' "; /*DOM对象“spXMLNode” 现在包含了XML节点<xmlnode>, 所以我们可以在它下面创建一个子节点。*/ CComPtr <IXMLDOMNode> spXMLChildNode; /*用接口IXMLDOMDocument的方法create Node方法创建一个新节点。*/ hr = spXMLDOM->createNode( CComVariant(NODE_ELEMENT), CComBSTR("xmlchildnode"), NULL, &spXMLChildNode); if ( FAILED(hr) ) throw "不能创建'xmlchildnode' 节点"; if ( spXMLChildNode.p == NULL ) throw "不能创建‘xmlchildnode' 节点"; //添加新节点到spXMLNode节点下 CComPtr <IXMLDOMNode> spInsertedNode; hr =spXMLNode->appendChild (spXMLChildNode,&spInsertedNode); if ( FAILED(hr) ) throw "不能创建‘xmlchildnode' 节点"; if ( spInsertedNode.p == NULL ) throw "不能移动‘xmlchildnode' 节点"; //设置新节点属性 CComQIPtr <IXMLDOMElement> spXMLChildElement; spXMLChildElement = spInsertedNode; if ( spXMLChildElement.p == NULL ) throw "不能在XML元素接口中查询到 'xmlchildnode' "; hr =spXMLChildElement->setAttribute (CComBSTR(L"xml"),CComVariant(L"fun")); if ( FAILED(hr) ) throw"不能插入新的属性"; /*下面的程序段用来寻找一个节点 并显示该节点的相关信息。*/ // 查找“xmldata/xmltext"节点 // 释放先前的节点 spXMLNode = NULL; bstrSS = L"xmldata/xmltext"; hr =spXMLDOM->selectSingleNode (bstrSS,&spXMLNode); if ( FAILED(hr) ) throw "不能定位‘xmltext'节点"; if ( spXMLNode.p == NULL ) throw "不能定位‘xmltext'节点"; // 得到该节点包含的文本并显示它 CComVariant varValue(VT_EMPTY); hr =spXMLNode->get_nodeTypedValue (&varValue); if ( FAILED(hr) ) throw "不能提取‘xmltext'文本"; if ( varValue.vt == VT_BSTR ) { /*显示结果。注意这里要把字符串 从形式BSTR转化为ANSI。*/ USES_CONVERSION; LPTSTR lpstrMsg = W2T (varValue.bstrVal); std::cout<< lpstrMsg << std::endl; } // if else { // 如果出现错误 throw "不能提取‘xmltext'文本"; } // else //将修改过的XML文档按指定的文档名保存 hr = spXMLDOM->save(CComVariant ("updatedxml.xml")); if ( FAILED(hr) ) throw "不能保存修改过的XML文档"; std::cout << "处理完成..." << std::endl << std::endl; } // try catch(char* lpstrErr) { // 出现错误 std::cout << lpstrErr << std::endl << std::endl; } // catch catch(...) { // 未知错误 std::cout << "未知错误..." << std::endl << std::endl; } // catch // 结束对COM的使用 CoUninitialize(); } 在hr =spXMLDOM->load(CComVariant(L"test.xml"),&bSuccess); 插如断点后有如下提示: Loaded 'ntdll.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\oleaut32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\msctf.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\clbcatq.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\comres.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\msxml3.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\system32\winhttp.dll', no matching symbolic information found. |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
62.500ms |