日期:2014-03-21  浏览次数:21013 次

怎麼樣把我下面的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;  
}