如果有这样一个字符串
_bstr_t str="<Connect action="Query"><Query>100</Query></Connect>";我如果想先解析出action是什么,然后我好根据action来判断解析的东西属于哪类
,然后再取出下层节点的数值,比如这个100这段代码该怎么写,望大虾赐教

解决方案 »

  1.   

    你的是XMLString,可以用Microsoft的XML3.0去解析
    loadXML()装载xml字符串
    用selectNodes按照XPath语法查询到节点Connect,保留其节点对象后,在解析其属性值
    这是一个例子,抛砖
    #import "msxml4.dll"
    #include "tchar.h"
    using namespace MSXML2;inline void TESTHR( HRESULT _hr ) 
       { if FAILED(_hr) throw(_hr); }void main()
    {
       try {
          IXMLDOMDocumentPtr docPtr;
          IXMLDOMNodePtr DOMNodePtr;      //init
          TESTHR(CoInitialize(NULL)); 
          TESTHR(docPtr.CreateInstance("Msxml2.DOMDocument.4.0"));
          
          // load a document
          _variant_t varXml("C:\\book.xml");
          _variant_t varOut((bool)TRUE);
          varOut = docPtr->load(varXml);
          if ((bool)varOut == FALSE)
             throw(0);
          MessageBox(NULL, _bstr_t(docPtr->xml), _T("Original Document"), MB_OK);      DOMNodePtr = docPtr->createComment("This is a comment node");
          (DOMNodePtr == NULL) ? throw(0): 0;
          TESTHR(docPtr->documentElement->appendChild(DOMNodePtr));      MessageBox(NULL, _bstr_t(docPtr->xml), _T("New Document"), MB_OK);   } catch(...)
       {
          MessageBox(NULL, _T("Exception occurred"), _T("Error"), MB_OK);
       }
    }Requirements
    Implementation: msxml4.dll, msxml2.libHeader and IDL files: msxml2.h, msxml2.idl
      

  2.   

    精巧的XML解析器pugxml源代码 详细信息 < XML >  一个精巧的XML解析器类。[代码性质] VC完整应用程序代码
    [代码作者] Kristen Wegner
    [文件大小] 305K 
    [更新日期] 2003-4-6 15:58:00 
    [下载次数] 1335 相关评论  
    http://www.vckbase.com/code/downcode.asp?id=1874
      

  3.   

    精巧的XML解析器pugxml源代码 详细信息 < XML >  一个精巧的XML解析器类。[代码性质] VC完整应用程序代码
    [代码作者] Kristen Wegner
    [文件大小] 305K 
    [更新日期] 2003-4-6 15:58:00 
    [下载次数] 1335 相关评论  
    http://www.vckbase.com/code/downcode.asp?id=1874
      

  4.   

    IXMLDOMDocument2 *pXMLDOMDoc;
    IXMLDOMNodeList *pNodeList;
    IXMLDOMNode *pNode; HRESULT hr =::CoCreateInstance(__uuidof(DOMDocument30),NULL,
    CLSCTX_INPROC_SERVER,__uuidof(IXMLDOMDocument2),(LPVOID*)&pXMLDOMDoc);

    VARIANT_BOOL vb = pXMLDOMDoc->loadXML(content);
    pXMLDOMDoc->getElementsByTagName("Query")->get_item(0,&pNode);
    pNode->get_childNodes(&pNodeList);
             pNodeList->get_item(0,&pNode);
    BSTR bstrNodeName;
    pNode->get_nodeName(&bstrNodeName);
      

  5.   

    CoInitialize(NULL); //初始化COM 环境 
    HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument)); 
    if(!SUCCEEDED(hr))
    {
    AfxMessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
    return "0" ;
    }

    if(!pDoc->loadXML(bstrXML))
    {
    m_Error.Format("XML字符串错误:%d",GetLastError());
    AfxMessageBox(m_Error);
    return "0";
    }

    _variant_t var; MSXML::IXMLDOMElementPtr pElement=pDoc->selectSingleNode("Connection"); var=pElement->getAttribute("Action");