<version_description>
<version>123</version>
<custom_id>456</custom_id>
<release_date>789</release_date>
<module>server</module>
</version_description> 
读取上面version_description下面多有的值。
下面这段代码如何循环读取并用MessageBox单个显示呢?
xmlNode=(MSXML2::IXMLDOMElementPtr)(pXMLDoc->selectSingleNode(_T("//version_description")));
VARIANT varVal;  
xmlNode->get_nodeTypedValue(&varVal);   
CString strValue = (TCHAR*)(_bstr_t)varVal;
CString str(varVal.bstrVal);
MessageBox(strValue);

解决方案 »

  1.   

    不知这样子可不可以?
    void  GetXML()
    {
    //读取XML
    CComPtr<IXMLDOMDocument> spDoc;    //DOM
    spDoc.CoCreateInstance(CLSID_DOMDocument); VARIANT_BOOL vb;
    spDoc->put_async(FALSE);
    spDoc->load(CComVariant(OLESTR("abc.xml")), &vb); //加载XML文件 if(!vb)
    //::MessageBox(NULL,"加载失败!","失败提示!",MB_OK);
    return;
    CComPtr<IXMLDOMElement> spRootEle;
    spDoc->get_documentElement(&spRootEle); //根节点  你的<version_description>节点
    CComPtr<IXMLDOMNodeList> spNodeList;
    spRootEle->get_childNodes(&spNodeList); //子节点列表 long nLen;
    spNodeList->get_length(&nLen); //子节点数
    for (long i = 0; i != nLen; ++i) //遍历子节点
    {
    CComPtr<IXMLDOMNode> spNode;
    spNodeList->get_item(i, &spNode);
    CComBSTR  a_nodeName;
    spNode->get_nodeName(&a_nodeName);//节点名
    CString nodeName=COLE2CT(a_nodeName); CComBSTR a_nodeValue;
    spNode->get_text(&a_nodeValue);//节点值
    CString nodeValue=COLE2CT(a_nodeValue);::MessageBox(NULL,nodeValue,"子节点!",MB_OK);

    }}
      

  2.   

    xml不就是个树啊, 呵呵, 那遍历树, 有中序, 前序, 后序啊. 算法google立马找到.然后自己建立个CMap的映射, 关键字为xml节点名字(CString), 值为遍历到该节点的函数地址(&YourFunction(..))