/////////////////////////////////////////////////////////////// // 读StringList结点 bool ScanParamXML::ReadStringListNode( IXMLDOMNode *const pTheNode, VectorOfString &vStr ) { if( NULL == pTheNode ) { return false; } try { vStr.clear(); // 初始化输出参数 _variant_t varVal = 0; IXMLDOMNode *pIpSeedNode; for( pTheNode->get_firstChild( &pIpSeedNode ); pIpSeedNode != NULL; pIpSeedNode->get_nextSibling( &pIpSeedNode ) ) { varVal = ReadNodeText( pIpSeedNode ); //cout << "Seed IP: " << _bstr_t( varVal.bstrVal ).operator char *() << endl; vStr.push_back( _bstr_t( varVal.bstrVal ).operator char *() ); } } catch( ... ) { return false; } return true; }
/////////////////////////////////////////////////////////////// // 读CommunityList结点 bool ScanParamXML::ReadCommunityListNode( IXMLDOMNode *const pTheNode, VectorOfCommunity &vCommunity ) { if( NULL == pTheNode ) { return false; } try { vCommunity.clear(); // 初始化输出参数 _variant_t varVal = 0; IXMLDOMNode *pCommunityNode, *pTextNode; for( pTheNode->get_firstChild( &pCommunityNode ); pCommunityNode != NULL; pCommunityNode->get_nextSibling( &pCommunityNode ) ) { Community community; for( pCommunityNode->get_firstChild( &pTextNode ); pTextNode != NULL; pTextNode->get_nextSibling( &pTextNode ) ) { _variant_t varNodeName; pTextNode->get_nodeName( &varNodeName.bstrVal ); varVal = ReadNodeText( pTextNode ); string sNodeName = _bstr_t( varNodeName.bstrVal ).operator char *();; if( sNodeName == string( "StartIp" ) ) { community.sStartIp = _bstr_t( varVal.bstrVal ).operator char *(); } else if( sNodeName == string( "EndIp" ) ) { community.sEndIp = _bstr_t( varVal.bstrVal ).operator char *(); } else if( sNodeName == string( "Get" ) ) { community.sGet = _bstr_t( varVal.bstrVal ).operator char *(); } else if( sNodeName == string( "Set" ) ) { community.sSet = _bstr_t( varVal.bstrVal ).operator char *(); } } //cout << "Start IP: " << community.sStartIp << ", End Ip :" << community.sEndIp << ", Get: " << community.sGet << ", Set: " << community.sSet << endl; vCommunity.push_back( community ); } } catch( ... ) { return false; } return true; }
/////////////////////////////////////////////////////////////// // 读IpScopeList结点 bool ScanParamXML::ReadIpScopeListNode( IXMLDOMNode *const pTheNode, VectorOfIpScope &vIpScope ) { if( NULL == pTheNode ) { return false; } try { vIpScope.clear(); // 初始化输出参数 _variant_t varVal = 0; IXMLDOMNode *pIpScopeNode, *pTextNode; for( pTheNode->get_firstChild( &pIpScopeNode ); pIpScopeNode != NULL; pIpScopeNode->get_nextSibling( &pIpScopeNode ) ) { IPScope ipScope; for( pIpScopeNode->get_firstChild( &pTextNode ); pTextNode != NULL; pTextNode->get_nextSibling( &pTextNode ) ) { _variant_t varNodeName; pTextNode->get_nodeName( &varNodeName.bstrVal ); varVal = ReadNodeText( pTextNode ); string sNodeName = _bstr_t( varNodeName.bstrVal ).operator char *();; if( sNodeName == string( "StartIp" ) ) { ipScope.sIpBegin = _bstr_t( varVal.bstrVal ).operator char *(); } else if( sNodeName == string( "EndIp" ) ) { ipScope.sIpEnd = _bstr_t( varVal.bstrVal ).operator char *(); } } //cout << "Start IP: " << ipScope.sIpBegin << ", End Ip :" << ipScope.sIpEnd << endl; vIpScope.push_back( ipScope ); } } catch( ... ) { return false; } return true; }
CString CXmlNode::ReadNodeTextBase(const wchar_t* bsName) { return ReadNodeText(CString(bsName)); }
/////////////////////////////////////////////////////////////// // 功能: XML 文档文本转换成扫描参数结构 // 参数: sXMLDocText [in] XML文档的文本 // sp [out] 扫描参数结构 // 返回: true - 成功, false - 失败 bool ScanParamXML::XMLToScanParam( const string &sXMLDocText, ScanParameter &sp ) { try { IXMLDOMDocument *pXmlDoc = NULL; IXMLDOMNode *pXmlDomNode = NULL; // 得到关于IXMLDOMDocument 接口的指针 pXMLDOC HRESULT hr = ::CoCreateInstance( CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, ( void ** )&pXmlDoc ); if( S_OK != hr ) { return false; } //得到关于IXMLDOMNode接口的指针pXDN hr = pXmlDoc->QueryInterface( IID_IXMLDOMNode, ( void ** )&pXmlDomNode ); if( S_OK != hr ) { return false; } VARIANT_BOOL bOk; _variant_t varSrc = sXMLDocText.c_str(); IXMLDOMElement *pRootNode; // 根结点 IXMLDOMNode *pNode; IXMLDOMNode *pNodeOut; pXmlDoc->loadXML( varSrc.bstrVal, &bOk ); // 从字符串建立XML文档 // 取得根结点 pXmlDoc->get_documentElement( &pRootNode ); pRootNode->get_nodeName( &varSrc.bstrVal ); // 遍历根结点的子结点 for( pRootNode->get_firstChild( &pNode ); pNode != NULL; pNode->get_nextSibling( &pNode ) ) { pNode->get_nodeName( &varSrc.bstrVal ); // cout << "Node name: " << varSrc.operator _bstr_t().operator char *() << endl; string sNodeName = _bstr_t( varSrc.bstrVal ).operator char *(); if( sNodeName == string( "Depth" ) ) { // 发现 Depth 结点 varSrc = ReadNodeText( pNode ); sp.nDepth = atoi( _bstr_t( varSrc.bstrVal ).operator char *() ); //cout << "Depth value: " << sp.nDepth << endl; } else if( sNodeName == string( "TryTimes" ) ) { // 发现 TryTimes 结点 varSrc = ReadNodeText( pNode ); sp.nTryTimes = atoi( _bstr_t( varSrc.bstrVal ).operator char *() ); //cout << "TryTimes value: " << sp.nTryTimes << endl; } else if( sNodeName == string( "Timeout" ) ) { // 发现 Timeout 结点 varSrc = ReadNodeText( pNode ); sp.nTimeout = atoi( _bstr_t( varSrc.bstrVal ).operator char *() ); //cout << "Timeout value: " << sp.nTimeout << endl; } else if( sNodeName == string( "MaxTreadCount" ) ) { // 发现 MaxTreadCount 结点 varSrc = ReadNodeText( pNode ); sp.nMaxTreadCount = atoi( _bstr_t( varSrc.bstrVal ).operator char *() ); //cout << "MaxTreadCount value: " << sp.nMaxTreadCount << endl; } else if( sNodeName == string( "SubScan" ) ) { // 发现 SubScan 结点 varSrc = ReadNodeText( pNode ); sp.bSubScan = ( string( _bstr_t( varSrc.bstrVal ).operator char *() ) == XML_TRUE ) ; //cout << "SubScan value: " << sp.bSubScan << endl; } else if( sNodeName == string( "DefaultCommunityGet" ) ) { // 发现 DefaultCommunityGet 结点 varSrc = ReadNodeText( pNode ); sp.sDefaultCommunityOfGet = _bstr_t( varSrc.bstrVal ).operator char *(); //cout << "DefaultCommunityGet value: " << sp.sDefaultCommunityOfGet << endl; } else if( sNodeName == string( "DefaultCommunitySet" ) ) { // 发现 DefaultCommunitySet 结点 varSrc = ReadNodeText( pNode ); sp.sDefaultCommunityOfSet = _bstr_t( varSrc.bstrVal ).operator char *(); //cout << "DefaultCommunityOfSet value: " << sp.sDefaultCommunityOfSet << endl; } else if( sNodeName == string( "Communitys" ) ) { // 发现 Communitys 结点 ReadCommunityListNode( pNode, sp.vcCommunityList ); } else if( sNodeName == string( "AddStartEnds" ) ) { // 发现 AddStartEnds 结点 ReadIpScopeListNode( pNode, sp.viIpScopeList ); // 读IpScopeList结点 } else if( sNodeName == string( "FilterStartEnds" ) ) { // 发现 FilterStartEnds 结点 ReadIpScopeListNode( pNode, sp.viFilterStartEndList ); // 读IpScopeList结点 } else if( sNodeName == string( "SubnetList" ) ) { // 发现 SubnetList 结点 ReadIpScopeListNode( pNode, sp.viSubnetList ); // 读IpScopeList结点 } else if( sNodeName == string( "SeedIpList" ) ) { // 发现 SeedIp 结点 ReadStringListNode( pNode, sp.vsSeedIpList ); } } // cout << "XMLToScanParam done successfully!" << endl; } catch(...) { return false; } return true; }