关于使用MSXML解析XML文件的问题

超级无敌咕咕鸡 2008-05-04 02:15:48
XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<ack_id_info>
<errno>success</errno>

<user>192.168.10.119</user>
<group>a</group>
<role>c</role>

<user>192.168.10.129</user>
<group>a</group>
<role>c</role>

<user>192.168.10.139</user>
<group>b</group>
<role>d</role>

<user>192.168.10.149</user>
<group>b</group>
<role>d</role>

</ack_id_info>
功能函数代码如下:

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;
}


小弟我刚学C++,上面是我的代码,我想实现的功能就是通过判断ERRNO节点,如果该节点的值为SUCCESS的话,就把这个节点下面所有的节点值都取出来放在一个字符串中,否则就不解析这个文件,请问如何实现啊。

...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleve 2008-05-05
  • 打赏
  • 举报
回复
帮顶:)
  • 打赏
  • 举报
回复
都没人来,晕了。。
xkyx_cn 2008-05-04
  • 打赏
  • 举报
回复
字符串比较请使用strcmp系列函数
H_A_H 2008-05-04
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶vv

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧