我有一个XML文件如下:
<Channel>
<Line>
<Channel BoardNo="0" DeviceName="dxxxB1C1" AgentId="5500" ChannelNo="0" DeviceGroup="A"/>
<Channel BoardNo="0" DeviceName="dxxxB1C2" AgentId="5501" ChannelNo="1" DeviceGroup="A"/>
<Channel BoardNo="0" DeviceName="dxxxB1C3" AgentId="5502" ChannelNo="2" DeviceGroup="B"/>
</Line>
</Channel>
现在我写了一个函数,想通过输入属性名参数来读取属性值
_bstr_t CXML::ReadXML(_bstr_t p_PathExpression,_bstr_t p_IndexName,_bstr_t p_IndexValue, _bstr_t p_AttrName)
{
MSXML2::IXMLDOMNodeListPtr pNodeList=NULL;
MSXML2::IXMLDOMNodePtr pNode=NULL;
_bstr_t AttrValue;
pNodeList=m_pDoc->selectNodes(p_PathExpression);
for(int i=0;i<pNodeList->Getlength();i++)
{
pNode=pNodeList->Getitem(i);
if(pNode!=NULL)
{
if(pNode->Getattributes()->getNamedItem(p_IndexName)->Gettext()==p_IndexValue)
{
AttrValue=(char*)(_bstr_t)pNode->selectSingleNode(p_AttrName)->Gettext();
break;
}
}
}
return AttrValue;
}
调用方法如下:
ReadXML("//Channel//Line//Channel","ChannelNo","1","DeviceName")
本意是想读取ChannelNo="1"的DeviceName的值。
但是执行到
AttrValue=(char*)(_bstr_t)pNode->selectSingleNode(p_AttrName)->Gettext(); 时抛出异常,
请高手指教!!!
<Channel>
<Line>
<Channel BoardNo="0" DeviceName="dxxxB1C1" AgentId="5500" ChannelNo="0" DeviceGroup="A"/>
<Channel BoardNo="0" DeviceName="dxxxB1C2" AgentId="5501" ChannelNo="1" DeviceGroup="A"/>
<Channel BoardNo="0" DeviceName="dxxxB1C3" AgentId="5502" ChannelNo="2" DeviceGroup="B"/>
</Line>
</Channel>
现在我写了一个函数,想通过输入属性名参数来读取属性值
_bstr_t CXML::ReadXML(_bstr_t p_PathExpression,_bstr_t p_IndexName,_bstr_t p_IndexValue, _bstr_t p_AttrName)
{
MSXML2::IXMLDOMNodeListPtr pNodeList=NULL;
MSXML2::IXMLDOMNodePtr pNode=NULL;
_bstr_t AttrValue;
pNodeList=m_pDoc->selectNodes(p_PathExpression);
for(int i=0;i<pNodeList->Getlength();i++)
{
pNode=pNodeList->Getitem(i);
if(pNode!=NULL)
{
if(pNode->Getattributes()->getNamedItem(p_IndexName)->Gettext()==p_IndexValue)
{
AttrValue=(char*)(_bstr_t)pNode->selectSingleNode(p_AttrName)->Gettext();
break;
}
}
}
return AttrValue;
}
调用方法如下:
ReadXML("//Channel//Line//Channel","ChannelNo","1","DeviceName")
本意是想读取ChannelNo="1"的DeviceName的值。
但是执行到
AttrValue=(char*)(_bstr_t)pNode->selectSingleNode(p_AttrName)->Gettext(); 时抛出异常,
请高手指教!!!
解决方案 »
- vs2008基于对话框的程序.pch文件里面有什么?
- 请教如何用Scrollbar来滚动显示控件
- 大家好,请问 怎么把一个 string类的字符串 以二进制形式保存进文件 , 又怎么把这些二进制文件 提取出来 得到原来的那个string字符串?
- CRichEditCtrl中有中文也有英文怎么计算长度
- CListView中添加一个进度条
- 请问,有什么函数或者控件可以逐一读出一个目录下的所有文件名?谢谢!
- 不明白什么错误:视图类中定义 CSerializeDoc* GetDocument();编译提示错误
- 怎样使一个临时生成的CEdit有边框?
- 如何屏蔽键盘和鼠标
- 请帮我解释一下!!!!!
- 我写的模板类,在class view中看不到其成员函数,且编程时也不会出现提示
- 各位高手请问如何实现根据左树视图选择动态生成右边的视图
对于xml取值问题,我不建议使用DOM方式,而改做使用SAX方式,因为SAX比DOM开销要小,速度要快,使用要简单。