使用XSD
来源:互联网 发布:什么是软件编程语言 编辑:程序博客网 时间:2024/05/02 04:31
内关联:xml文件XML_1.xml
<?xml version="1.0"?><Class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd"><Teacher Name="张一" Age="31"/> <Student Name="吴七" Age="18"/><Student Name="赵六" Age="17"/><Student Name="王五" Age="19"/><Student Name="钱三" Age="17"/></Class>
xlm文件:XML_2.xml
<?xml version="1.0"?><Class><Teacher Name="张一" Age="31"<Student Name="吴七" Age="18"/><Student Name="赵六" Age="17"/><Student Name="王五" Age="19"/><Student Name="钱三" Age="17"/><Student Name="李四" Age="17"/></Class>xsd文件:XML_2.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Class"> <xsd:complexType> <xsd:sequence> <xsd:element name="Teacher"> <xsd:complexType> <xsd:sequence/> <xsd:attribute name="Name" type="xsd:string" use="required"/> <xsd:attribute name="Age" type="xsd:int" default="25"/> </xsd:complexType> </xsd:element> <xsd:element name="Student" maxOccurs="5"> <xsd:complexType> <xsd:sequence/> <xsd:attribute name="Name" type="xsd:string" use="required"/> <xsd:attribute name="Age" type="xsd:int" default="18"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>
使用XML_2.xsd校验XML_2.xml
#include <tchar.h>#include <windows.h>#include <strsafe.h>#include <msxml6.h>#pragma comment (lib,"msxml6.lib")#define GRS_ALLOC(sz)HeapAlloc(GetProcessHeap(),0,sz)#define GRS_CALLOC(sz)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sz)#define GRS_SAFEFREE(p)if(NULL != p){HeapFree(GetProcessHeap(),0,p);p=NULL;}#define GRS_USEPRINTF() TCHAR pBuf[1024] = {};DWORD dwRead = 0;#define GRS_PRINTF(...) \StringCchPrintf(pBuf,1024,__VA_ARGS__);\WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),pBuf,lstrlen(pBuf),NULL,NULL);#define GRS_SAFERELEASE(I) if(NULL != (I)){(I)->Release();(I)=NULL;}#define GRS_COM_CHECK(hr) if(FAILED(hr)){goto CLEAR_UP;}VOID ReportDocErr(LPCTSTR pszXMLFileName,IXMLDOMParseError* pIDocErr ){GRS_USEPRINTF();long lLine=0;long lCol=0;LONG LErrCode=0;BSTR bstrReason=NULL;BSTR bstrSrcText=NULL;pIDocErr->get_line(&lLine);pIDocErr->get_linepos(&lCol);pIDocErr->get_reason(&bstrReason);pIDocErr->get_srcText(&bstrSrcText);GRS_PRINTF(_T("XML文档%s中行%ld,列%ld中的srcTest%s,中lErrorcode:%s,reason%s"),pszXMLFileName,lLine,lCol,bstrSrcText,LErrCode,bstrReason);SysFreeString(bstrReason);SysFreeString(bstrSrcText);}int _tmain(){CoInitialize(NULL);GRS_USEPRINTF();TCHAR pXMLFile1[MAX_PATH]=_T("XML_1.xml");TCHAR pXMLFile2[MAX_PATH]=_T("XML_2.xml");//TCHAR pXSDFile[MAX_PATH]=_T("test.xsd");TCHAR pXSDFile[MAX_PATH]=_T("XML_2.xsd");IXMLDOMDocument2* pXMLDoc=NULL;IXMLDOMParseError* pXMLErr=NULL;IXMLDOMDocument2* pSchemaDoc=NULL;IXMLDOMSchemaCollection2* pXSDCollection=NULL;VARIANT_BOOL bRet=VARIANT_FALSE;HRESULT hr=S_OK;VARIANT vtXMLFileName={};VARIANT vtXSDFile={};VARIANT vtSchema={};VARIANT vtSchemaDoc={};////1内联schema文件,直接判断加载是否成功////创建XML Dom的com接口,标准的com初始化调用,需要注意:为了能够支持XSD必须创建DOMDocument40对象的IXMLDomDocument2以上的接口//hr=CoCreateInstance(CLSID_DOMDocument60,NULL,//CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument2,(void**)&pXMLDoc);//if (FAILED(hr))//{//GRS_PRINTF(_T("无法创建IXMLDOMDocument接口."));////goto CLEAR_UP;//}////关闭同步特征//hr=pXMLDoc->put_async(VARIANT_FALSE);////打开解析式校验特征//hr=pXMLDoc->put_validateOnParse(VARIANT_TRUE);////加载和判断//vtXMLFileName.vt=VT_BSTR;//vtXMLFileName.bstrVal=SysAllocString(pXMLFile1);//hr=pXMLDoc->load(vtXMLFileName,&bRet);//SysAllocString(vtXMLFileName.bstrVal);//if (VARIANT_TRUE!=bRet||FAILED(hr))//{//pXMLDoc->get_parseError(&pXMLErr);//ReportDocErr(vtXMLFileName.bstrVal,pXMLErr);//goto CLEAR_UP;//}//GRS_PRINTF(_T("%s符合%s框架定义的要求,验证成功\n"),pXMLFile1,pXSDFile);//2 xml内没有关联schema文件,需要程序关联hr=CoCreateInstance(CLSID_XMLSchemaCache40,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMSchemaCollection2,(void**)&pXSDCollection);//方法1加载schema文件为DOMDocumenthr=CoCreateInstance(CLSID_DOMDocument40,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument2,(void**)&pSchemaDoc);GRS_COM_CHECK(hr);pSchemaDoc->put_async(VARIANT_FALSE);vtXSDFile.vt=VT_BSTR;vtXSDFile.bstrVal=SysAllocString(pXSDFile);hr=pSchemaDoc->load(vtXSDFile,&bRet);SysFreeString(vtXSDFile.bstrVal);if (VARIANT_TRUE!=bRet||FAILED(hr)){pSchemaDoc->get_parseError(&pXMLErr);ReportDocErr(pXSDFile,pXMLErr);goto CLEAR_UP;}vtSchemaDoc.vt=VT_UNKNOWN;vtSchemaDoc.punkVal=pSchemaDoc;hr=pXSDCollection->add(_T(""),vtSchemaDoc);//创建xml文档hr=CoCreateInstance(CLSID_DOMDocument40,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument2,(void**)&pXMLDoc);if (FAILED(hr)){GRS_PRINTF(_T("无法创建IXMLDOMDocument2接口"));goto CLEAR_UP;}pXMLDoc->put_async(VARIANT_FALSE);pXMLDoc->put_validateOnParse(VARIANT_TRUE);//关联xml和schemavtSchema.vt=VT_DISPATCH;vtSchema.pdispVal=pXSDCollection;hr=pXMLDoc->putref_schemas(vtSchema);//关联//加载文件和判断vtXMLFileName.vt=VT_BSTR;vtXMLFileName.bstrVal=SysAllocString(pXMLFile2);hr=pXMLDoc->load(vtXMLFileName,&bRet);SysFreeString(vtXMLFileName.bstrVal);if (VARIANT_TRUE!=bRet||FAILED(hr)){pXMLDoc->get_parseError(&pXMLErr);ReportDocErr(pXMLFile2,pXMLErr);goto CLEAR_UP;}GRS_PRINTF(_T("%s,符合%s架构定义要求,验证成功"),pXMLFile2,pXSDFile);CLEAR_UP:GRS_SAFERELEASE(pXMLDoc);GRS_SAFERELEASE(pXMLErr);GRS_SAFERELEASE(pXSDCollection);GRS_SAFERELEASE(pSchemaDoc);CoUninitialize();return 0;}
0 0
- 使用XSD
- 使用 XSD Inference 实用程序
- CodeSynthesis XSD使用入门
- 如何使用XSD
- xsd的使用
- 使用xsd验证xml
- 如何使用XSD
- 使用XSD验证xml
- 使用dom4j解析XSD文件
- 使用xsd文件验证xml
- XSD
- XSD
- xsd
- 如何定义XSD并在XML中使用XSD
- 如何定义XSD并在XML中使用XSD
- 使用架构(XSD)验证XML文件
- 将XSD架构文件嵌入资源使用
- java中使用xsd验证xml
- c++ 快速排序
- Linux中的gpio口使用方法
- tableView 顶部高出一部分解决方法
- struts2校验器
- 数据链路层的MAC和LLC子层
- 使用XSD
- postpgsql与admin3-1.18的安装(LINUX-Fedora-系统)
- 将枚举以集合返回
- 使用ProgressIndicator做进度显示
- 如何将 MSHFlexgrid 里反色的特征也保持到 EXCEL 里
- U-Boot启动流程(Linux内核)的分析
- IE6通过点击 <a href="javascript:void(0);"></a>方式动态创建iframe无法显示
- 书单推荐 — 《浪潮之巅》
- iOS Block部分