CString CLocalSearch::GetXMLString() { CString strXML; for ( POSITION pos1 = m_pSchemas.GetStartPosition() ; pos1 ; ) { CXMLElement* pGroup; CSchema* pSchema; m_pSchemas.GetNextAssoc( pos1, (void*&)pSchema, (void*&)pGroup ); strXML += _T("<?xml version=\"1.0\"?>\r\n"); pGroup->ToString( strXML, TRUE ); for ( POSITION pos2 = pGroup->GetElementIterator() ; pos2 ; ) { CXMLElement* pChild = pGroup->GetNextElement( pos2 ); pChild->DeleteAttribute( _T("index") ); pChild->Detach(); } delete pGroup; } m_pSchemas.RemoveAll(); return strXML; }
BOOL CLibraryBuilderPlugins::ExtractMetadata(CString& strPath, HANDLE hFile) { CString strType; int nExtPos = strPath.ReverseFind( '.' ); if ( nExtPos > 0 ) strType = strPath.Mid( nExtPos ); CharLower( strType.GetBuffer() ); strType.ReleaseBuffer(); ILibraryBuilderPlugin* pPlugin = NULL; if ( m_pMap.Lookup( strType, (void*&)pPlugin ) ) { if ( pPlugin == NULL ) return FALSE; } else { pPlugin = LoadPlugin( strType ); if ( pPlugin == NULL ) return FALSE; } CXMLElement* pXML = new CXMLElement(); ISXMLElement* ppXML = (ISXMLElement*)CXMLCOM::Wrap( pXML, IID_ISXMLElement ); BSTR bsFile = strPath.AllocSysString(); HRESULT hResult = pPlugin->Process( hFile, bsFile, ppXML ); SysFreeString( bsFile ); ppXML->Release(); BOOL bSuccess = FALSE; if ( hResult == S_OK ) { if ( CXMLElement* pOuter = pXML->GetFirstElement() ) { CXMLElement* pInner = pOuter->GetFirstElement(); CString strSchemaURI = pOuter->GetAttributeValue( CXMLAttribute::schemaName ); if ( pInner && strSchemaURI.GetLength() ) { pInner = pInner->Detach(); bSuccess = m_pBuilder->SubmitMetadata( strSchemaURI, pInner ); } } } else if ( hResult == E_UNEXPECTED ) { bSuccess = m_pBuilder->SubmitCorrupted(); } delete pXML; return bSuccess; }
CXMLElement* CPlayerWnd::LoadXML(LPCTSTR lpszName, BOOL bCreate) { CXMLElement* pXML = CXMLElement::FromFile( _T("Xhistory.xml"), TRUE ); CXMLElement* pOrder = NULL; if ( pXML ) pOrder = pXML->GetElementByName( lpszName, bCreate ); else if ( bCreate ) pOrder = new CXMLElement( NULL, lpszName ); if ( pOrder ) pOrder->Detach(); pXML->Delete(); return pOrder; }