void CSchemaXmlDlg ::OnBnClickedButton1 ()
{
CString strScmFile = g_strRootPath + _T ("//schema.xsd" );
try
{
//1.xml 内关联了 schema 文件,直接判断加载是否成功
{
CString strXmlFile = g_strRootPath + _T ("//xml_1.xml" );
_variant_t vFile ((LPCTSTR )strXmlFile );
// 创建组件
MSXML2 ::IXMLDOMDocumentPtr pDoc ;
pDoc .CreateInstance (MSXML2 ::CLSID_DOMDocument40 );
pDoc ->async = VARIANT_FALSE ;
pDoc ->validateOnParse = VARIANT_TRUE ;
// 加载和判断
VARIANT_BOOL bRet = pDoc ->load (vFile );
if (bRet == VARIANT_TRUE )
{
MessageBox (_T ("xml_1.xml 加载成功 " ));
}
else
{
CString strError ;
MSXML2 ::IXMLDOMParseErrorPtr pError = pDoc ->parseError ;
strError .Format (
_T ("xml_1.xml 加载失败: code=%d, reson=%s" ),
pError ->errorCode , (LPCTSTR )pError ->reason );
MessageBox (strError );
}
}
//2.xml 内没有关联 schema 文件,需要程序关联
{
CString strXmlFile = g_strRootPath + _T ("//xml_2.xml" );
_variant_t vFile ((LPCTSTR )strXmlFile );
// 创建 schema
MSXML2 ::IXMLDOMSchemaCollectionPtr pSchema ;
pSchema .CreateInstance (MSXML2 ::CLSID_XMLSchemaCache40 );
// 加载 schema 文件,或者以文件名为参数
//MSXML2::IXMLDOMDocumentPtr pSchemaDoc;
//pSchemaDoc.CreateInstance(MSXML2::CLSID_DOMDocument40);
//pSchemaDoc->async = VARIANT_FALSE;;
//pSchemaDoc->load(_variant_t((LPCTSTR)strScmFile));
//pSchema->add(_bstr_t(L""), pSchemaDoc.GetInterfacePtr());
pSchema ->add (_bstr_t (L "" ), _variant_t ((LPCTSTR )strScmFile ));
// 创建文件组件
MSXML2 ::IXMLDOMDocumentPtr pDoc ;
pDoc .CreateInstance (MSXML2 ::CLSID_DOMDocument40 );
pDoc ->async = VARIANT_FALSE ;
pDoc ->validateOnParse = VARIANT_TRUE ;
// 关联 xml 和 schema
MSXML2 ::IXMLDOMDocument2Ptr pDoc2 = pDoc ;
//pDoc2->putref_schemas(_variant_t(pSchema));// 这句不行
pDoc2 ->schemas = pSchema .GetInterfacePtr ();
// 加载文件和判断
VARIANT_BOOL bRet = pDoc ->load (vFile );
if (bRet == VARIANT_TRUE )
{
MessageBox (_T ("xml_2.xml 加载成功 " ));
}
else
{
CString strError ;
MSXML2 ::IXMLDOMParseErrorPtr pError = pDoc ->parseError ;
strError .Format (
_T ("xml_2.xml 加载失败: code=%d, reson=%s" ),
pError ->errorCode , (LPCTSTR )pError ->reason );
MessageBox (strError );
}
}
}
catch (...)
{
MessageBox (_T (" 程序出现异常! " ));
}
}