C++ 用Schema验证xml文件问题(MSXML)
msxml里有没有现成的库可以根据自己定义的schema验证xml?没有的话是不是只能按自己特定的schema写程序去验证?
以下是从网上找的代码,其中有schema与xml的关联啊,但为什么无论xml文件有没有错,都会加载成功,包括节点顺序错误、数据类型不对等等这些错误都检测不出来。求解啊!
CString scmFile = "schema.xsd";
CString xmlFile = "student.xml";
_variant_t vFile((LPCTSTR)xmlFile);
// 创建 schema
MSXML2::IXMLDOMSchemaCollectionPtr pSchema ;
pSchema.CreateInstance(__uuidof(XMLSchemaCache60));
// 加载 schema 文件,或者以文件名为参数
pSchema ->add(_bstr_t("http://tempuri.org/schema.xsd"),_variant_t((LPCTSTR )scmFile));
// 创建文件组件
MSXML2 ::IXMLDOMDocumentPtr pDoc ;
pDoc .CreateInstance (__uuidof(DOMDocument60));
pDoc ->async = VARIANT_FALSE ;
pDoc ->validateOnParse = VARIANT_TRUE ;
// 关联 xml 和 schema
MSXML2 ::IXMLDOMDocument2Ptr pDoc2 = pDoc;
pDoc2->schemas = pSchema.GetInterfacePtr();
// 加载文件和判断
VARIANT_BOOL bRet = pDoc ->load(vFile);
if (bRet == VARIANT_TRUE )
{
MessageBox(NULL,_T("xml文件加载成功!"),_T("Information"),MB_OK|MB_ICONINFORMATION);
return true;
}
else
{
CString strError ;
MSXML2 ::IXMLDOMParseErrorPtr pError = pDoc ->parseError ;
strError .Format (
_T ("xml文件加载失败: code=%d, reson=%s" ),
pError ->errorCode , (LPCTSTR)pError ->reason );
MessageBox(NULL,strError,_T("Information"),MB_OK|MB_ICONINFORMATION);
return false;
} XML Schema MSXML C++
[解决办法]
很明显有,而且你给出了代码,仔细检查你的数据和程序
还可以参考
http://blog.csdn.net/crybird/article/details/4404899