33,311
社区成员
发帖
与我相关
我的任务
分享
int Resolve_XML(ACK_INFO_TYPE_E type)
{
CoInitialize(NULL);
CComPtr<IXMLDOMDocument> spXMLDOM;
HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
if ( FAILED(hr)){
throw "不能创建XML Parser对象";
return -1;
}
if ( spXMLDOM.p == NULL ) {
throw "不能创建XML Parser对象";
return -1;
}
// 如果对象创建成功的话,就开始装载XML文档
VARIANT_BOOL bSuccess = false;
hr = spXMLDOM->load(CComVariant(path),&bSuccess);
if ( FAILED(hr) )
{
throw "不能够在解析器中装载XML文档";
return -1;
}
if ( !bSuccess )
{
throw "不能够在解析器中装载XML文档";
return -1;
}
CComBSTR bstrSS(L"errno");
CComPtr<IXMLDOMNode> spXMLNode;
//用接口IXMLDOMDocument的方法selectSingleNode方法定位该节点
hr = spXMLDOM->selectSingleNode(bstrSS,&spXMLNode);
if ( FAILED(hr) )
{
throw "不能在XML节点中定位'errno' ";
return -1;
}
if ( spXMLNode.p == NULL )
{
throw "不能在XML节点中定位'errno' ";
return -1;
}
// 得到该节点包含的文本并显示它
CComVariant varValue(VT_EMPTY);
hr = spXMLNode->get_nodeTypedValue(&varValue);
if ( FAILED(hr) )
{
throw "不能提取'errno'文本";
return -1;
}
if ( varValue.vt == VT_BSTR ){
// 显示结果,注意这里要把字符串从形式BSTR转化为ANSI
USES_CONVERSION;
LPTSTR lpstrMsg = W2T(varValue.bstrVal);
if((LPTSTR)"success" == lpstrMsg)//这里可能会有问题
{
spXMLNode = NULL; // 释放先前的节点
CComPtr<IXMLDOMNodeList> spXMLNodeList;
long length;
spXMLNodeList->get_length(&length);
for(long i = 0; i < length; i++)
{
CComPtr<IXMLDOMNode> spNode;
CComQIPtr<IXMLDOMElement> spVoice;
spXMLNodeList->get_item(i, &spNode);
spVoice = spNode;
if (spVoice)
{
CComBSTR data;
CComVariant val;
spVoice->getAttribute(attrRef, &val);
}
}
return 0;
}
else
{
throw "文档errno节点值为failed";
return -1;
}
}else {
// 如果出现错误
throw "不能提取'errno'文本";
return -1;
}
return 0;
}