我已经得到了根节点 
我想用C++得到每个instacne的所有节点的属性。希望能给出C++的例子。谢谢!!! 
<?xml version="1.0"?> <instances> 
  <instance Name="Family1"> 
   <symbol symbolId="138896"/> 
   <transform> 
      <Origin X="-10.3371471314108" Y="14.0983549530859" Z="1.18091569184673E-17"/> 
      <Basises> 
       <Basis0 Item0="-1" Item1="3.23887764179924E-15" Item2="0"/> 
       <Basis1 Item0="-3.23887764179924E-15" Item1="-1" Item2="0"/> 
       <Basis2 Item0="0" Item1="0" Item2="1"/> 
      </Basises> 
   </transform> 
  </instance>   <instance Name="Family1"> 
     <symbol symbolId="138896"/> 
     <transform> 
      <Origin X="-19.8371471314108" Y="14.0983549530859" Z="1.18091569184673E-17"/> 
      <Basises> 
       <Basis0 Item0="-1" Item1="3.23887764179924E-15" Item2="0"/> 
       <Basis1 Item0="-3.23887764179924E-15" Item1="-1" Item2="0"/> 
       <Basis2 Item0="0" Item1="0" Item2="1"/> 
      </Basises> 
     </transform> 
   </instance> 
<instances>

解决方案 »

  1.   

     MSXML遍历读取xml节点的示例代码 <?xml   version="1.0"   ?>   
      <Root>   
              <Article   id="1"   sort="news">WuHan</Article>   
              <Article   id="2"   sort="news">上海</Article>   
      </Root>   
        
        
      可以读出属性id,sort和节点内容   
      注意:不是读取单个节点,是所有的节点,结果保存到数组或直接AfxMessageBox();   
      我找了一下发现网上的文章都是针对单个节点用   
      MSXML::IXMLDOMNodePtr   pRootNode=pCommandDoc->selectSingleNode("root/record");读取   
        
      IXMLDOMDocumentPtr   pXmlDoc;   
      IXMLDOMNodeListPtr   NodeListPtr;   
      MSXML::IXMLDOMNode               *DOMNode   =   NULL;     
      CString   strContest;   
      //省略load   
      try   
      {   
            NodeListPtr   =   pXmlDoc->getElementsByTagName("Article");   
            for(int   i=0;   i<NodeListPtr->length;   i++)   
            {   
      NodeListPtr->get_item(i,&DOMNode);   
      strContest   =   (LPCSTR)DOMNode->text;   
                        AfxMessageBox(strContest);   
            }   
      }   
      catch(_com_error   &err)   
      {   
                    CString     strErr   =   (LPCTSTR)err.Description();   
                    AfxMessageBox(strErr);   
      }      怎麼样把我下面的xml格式的文件里面的结点中值循环读出来  
    <?xml  version="1.0"  standalone="yes"?>  
    <InOutStore  xmlns="http://tempuri.org/InOutStore.xsd">  
       <OutStore>  
           <code>6900916200010</code>  
           <time>2005-7-11  20:47:54</time>  
       </OutStore>  
       <OutStore>  
           <code>1P25-68596-01</code>  
           <time>2005-7-11  20:48:10</time>  
       </OutStore>  
       <OutStore>  
           <code>6901028337168</code>  
           <time>2005-7-11  20:48:20</time>  
       </OutStore>  
       <OutStore>  
           <code>6901028337168</code>  
           <time>2005-7-11  20:48:32</time>  
       </OutStore>  
       <OutStore>  
           <code>6901028337168</code>  
           <time>2005-7-11  20:48:41</time>  
       </OutStore>  
       <PocketId>  
           <pid>001</pid>  
       </PocketId>  
    </InOutStore>  
     
    用 节点[索引]的模式可以读取重名节点, 下面是代码
    #if  !defined(__MSXML3__)  
     
    #define  __MSXML3__  
     
    #import  "msxml3.dll"    
    using  namespace  MSXML2;  
    #endif  
     
               IXMLDOMDocument2Ptr  xml;  
    xml.CreateInstance(__uuidof(MSXML2::DOMDocument));  
    xml->load("xxxx.xml");  
     
    CStringArray  timeA,  codeA;  
     
    int  i=  1;  
    BOOL  bNode  =  TRUE;  
    while  (bNode)  
    {  
     
    IXMLDOMNodePtr  node;  
    CString  strRoot;  
     
    strRoot.Format("/InOutStore/OutStore[%d]",  i++);  
    node=xml->selectSingleNode(_bstr_t(strRoot));  
    if  (node)  
    {  
         IXMLDOMNodePtr  nodeCode,  nodeTime;  
         VARIANT  value;  
         CString  strCode  =  strRoot  +  "/code";  
       nodeCode=xml->selectSingleNode(_bstr_t(strCode));  
         nodeCode->get_nodeTypedValue(&value);  
     
       CString  str1(value.bstrVal);  
       SysFreeString(value.bstrVal);  
       codeA.Add(str1);  
     CString  strTime  =  strRoot  +  "/time";  
       nodeTime=xml->selectSingleNode(_bstr_t(strTime  ));  
         nodeTime->get_nodeTypedValue(&value);  
     
       CString  str2(value.bstrVal);  
       SysFreeString(value.bstrVal);  
       timeA.Add(str2);  
    }  
    else  
           bNode  =  FALSE;  
    }