现在载入跟现实已实现,现在想增加一个CListCtrl,用来显示选择的树形节点的XML属性。
比如XML文件为:
<SCL xmlns="http://www.iec.ch/61850/2003/SCL" revision="A" version="2007">
    <Header id="123.ICD" revision="1" toolID="ICDTOOL" version="1.0">
        <History>
        </History>
    </Header>
</SCL>
选择SCL时,List显示xmlns等于多少,revision等于多少等等,选择Header时也是。
现在遇到的情况是在OnSelchangedTree中添加
HTREEITEM hr = m_TreeCtrl.GetSelectedItem();//获得选中节点句柄
CString strSelectName =  m_TreeCtrl.GetItemText(hr);//获得选中节点名
IXMLDOMNodeListPtr m_pList = m_pDocRoot->getElementsByTagName((_bstr_t)strSelectName);
最后一句执行后选择SCL节点时m_pList.length为0,其中m_pDocRoot = m_pDoc->documentElement;
请问哪里出了问题吗?或者提供一下用别的方法实现功能。谢谢。

解决方案 »

  1.   

    http://www.codeproject.com/KB/tree/floattreecontrol.aspx
      

  2.   

    list = pDoc->getElementsByTagName(_T("SCL"));

    for (int i = 0; i < list->Getlength(); i++)
    {
    IXMLDOMElementPtr element = list->item[i];   
    IXMLDOMNamedNodeMapPtr pMap;   
    element->get_attributes(&pMap);   
    long len;     
    pMap->get_length(&len);   
    for   (long   i=0;   i<len;   i++)   
    {   
    IXMLDOMNodePtr pNode;   
    pMap->get_item(i, &pNode);   
    _variant_t name = pNode->GetnodeName();// node name.eg 
    _variant_t val = pNode->GetnodeValue();// node vale.eg 
    SysFreeString(strName);   
    pNode->Release();   
    }   
    pMap->Release();   
    }
      

  3.   

    3楼的怎么有的XML文件可以 有的XML文件pMap->get_length(&len);LEN为0那?该NODE有属性。
      

  4.   

    换一种方式来做可能更容易,在根据XML创建TREE项时,就直接调用 SetItemData 把对应的 IXMLDOMElement* 保存起来,当用户点击项时,直接调用 GetItemData 获得XML节点接口指针,然后读取节点属性。
      

  5.   

    看错了 是getElementsByTagName返回的列表长度为0,确认XML里有该字段。方便的话我可以E个文件给你。
      

  6.   

    要是节点有重名的可以实现吗?点击树形结构时只有一个点击节点的句柄,在用getElementsByTagName找到节点。这样一旦有重名的,选择节点时会把其他名字一样的节点也显示出来啊
      

  7.   

    我遍历树的时候用的是IXMLDOMNodePtr,但要访问属性的话要是个IXMLDOMElementPtr
    看网上说强制转换不行,有什么好的别的方法吗
      

  8.   

    1、IXMLDOMNode* 和 IXMLDOMElement* 选择一种保存即可,两者能互相查询出来
    2、如果保存接口指针,一定要记得引用计数,保存到项数据时增加接口的引用计数,项删除时一定要减少接口的引用计数
    3、保存接口指针的好处是永远不用担心重名的问题,肯定一一对应,而且不需要每次点击树项时都去重复搜索,何况搜索到的结果还不一定正确。
    4、接口指针不要强制转换,而应该全部采取 QueryInterface 的方式获得。
      

  9.   

    XML的节点属性中可以带/吗?貌似加进去个网址名后该节点的IXMLDOMNodeListPtr长度就为0了
      

  10.   

    可以带/貌似是不能带xmlns属性
    <SCL xmlns="http://www.iec.ch/61850/2003/SCL" revision="A" version="2007" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.iec.ch/61850/2003/SCL C:/SASysTools/schema/scl/SCL.xsd">
    比如这样
      

  11.   

    在此提供几个网址:
    1 XMLTree.exe 是一个示例演示如何使用 MSXML DOM 接口,从 c + + 应用程序。
    http://support.microsoft.com/kb/246230#top2 VC使用Cup生成、解析xml资料
    http://download.csdn.net/source/9928773 CMarkup官网地址
     http://www.firstobject.com/