Ejemplo n.º 1
0
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;
}
Ejemplo n.º 3
0
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;
}