如何用schema验证xml(MSXML),简单VC代码

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 (" 程序出现异常! " ));

    }

}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值