以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XML源码及示例(仅原创和转载) 』  (http://bbs.xml.org.cn/list.asp?boardid=32)
----  [求助]那位高手帮我分析一下这段代码(每一句给我加个注释)谢谢!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=19214)


--  作者:cocos
--  发布时间:6/4/2005 11:02:00 AM

--  [求助]那位高手帮我分析一下这段代码(每一句给我加个注释)谢谢!
int DFS(MSXML2::IXMLDOMNodePtr& pNode, long treeid, char* tablename )
{
 //遍历算法函数(深度优先搜索)
 CString sql, sql_name, sql_value;
 HRESULT hr;

 int nCount =0;
 MSXML2::IXMLDOMNodeListPtr pNodelist;
 if( pNode->hasChildNodes() )
 {
  hr = pNode->get_childNodes( &pNodelist );
  if( !SUCCEEDED( hr ) )
  return 0;

  long length = 0;
  hr = pNodelist->get_length( &length );
  for( long i = 0; i < length; i++ )
  {
   pNodelist->get_item( i, &pNode );

   CString nodename = (char*)pNode->nodeName;

   MSXML2::DOMNodeType nodeType;
   pNode->get_nodeType(&nodeType);

   if( nodename == tablename && nodeType == MSXML2::NODE_ELEMENT )
   {
    //节点值
    CString tmpValue;

    //节点属性,放在链表中
    MSXML2::IXMLDOMNamedNodeMapPtr pIXMLDOMNamedNodeMap = NULL;
    MSXML2::IXMLDOMNodePtr pAttrItem;
    hr = pNode->get_attributes(&pIXMLDOMNamedNodeMap);
    if( pIXMLDOMNamedNodeMap )
    {
     long nColCount ;
     pIXMLDOMNamedNodeMap->get_length(&nColCount);

     CString strName;
     CString strValue;
     sql_name = _T(""), sql_value = _T("");
     for( int i=0; i< nColCount; i++ )
     {
      pIXMLDOMNamedNodeMap->get_item(i,&pAttrItem);
      strName   = (char*)(_bstr_t)pAttrItem->nodeName;    
      strValue  = (char*)(_bstr_t)pAttrItem->nodeTypedValue; 
      
      AnalyzeSQL( strName, strValue, sql_name,sql_value);
     }

     sql_name.TrimRight( ',');
     sql_value.TrimRight(',');
     char buf[]  ="insert into b_jlNumber(ClassID, TreeID, %s ) values (%d, %d, %s )";

     sql.Format( buf, sql_name, 1022, treeid,  sql_value );

     CTableRow::m_pManager->GetDB()->ExecuteSQL( sql );

     nCount++;
    }
   }
   else
    nCount += DFS( pNode, treeid, tablename );
  }//end for
 }//end if

 return nCount;
}

bool CR_jlNumber::DoExpandCmd( int cmd, long tree,CTableDefined* pTableCtrl )
{
 CString strPath;
 strPath.Format( "%s\\work\\*.xml", CTableRow::m_pManager->GetCurDirection()  );

 CFileDialog dlg( true, "xml", strPath, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "上报人员信息 (*.XML)|*.xml|上报人员信息(*.xml)|*.xml|" );
 if( IDOK != dlg.DoModal() )
  return false;

 CString strFilepath = dlg.GetPathName();
 
 CoInitialize(NULL);  //初始化COM 环境
 HRESULT hr;
 CString str;
 MSXML2::IXMLDOMDocumentPtr pDoc;
 hr =pDoc.CreateInstance( "Msxml2.DOMDocument.4.0" );

 if( !SUCCEEDED( hr ) )
 {
  AfxMessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
  return false;
 }

 pDoc->Putasync( false );
 BOOL bResult;
 bResult = pDoc->load( strFilepath.GetBuffer(200) );//
 if( bResult == FALSE )
 {
  AfxMessageBox("加载xml文件失败!");
  return false;
 }

 int ncount = DFS( (MSXML2::IXMLDOMNodePtr&)pDoc, tree, "b_Employee" );//遍历
 CString strBuff;
 strBuff.Format( "共导入数据 %d 条", ncount );
 AfxMessageBox( strBuff );
 return true;
};


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
27.344ms