我有一个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(); 时抛出异常,  
请高手指教!!!  

解决方案 »

  1.   

    我没有试验过如何用dom的方式把属性也作为node来处理取值。
    对于xml取值问题,我不建议使用DOM方式,而改做使用SAX方式,因为SAX比DOM开销要小,速度要快,使用要简单。
      

  2.   

    AttrValue=(char*)(_bstr_t)pNode->selectSingleNode("@" + p_AttrName)->Gettext();
      

  3.   

    http://www.csdn.net/develop/read_article.asp?id=24497
      

  4.   

    谢谢ross33123(),已经通过,能否解释一下,为何要加“@”,谢谢!
      

  5.   

    selectSingleNode 期待一个 XPATH 表达式,在 XPATH 里属性前应该加 @