以文本方式查看主题

-  计算机科学论坛  (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