工具:notepad++、VS2008(MSXML6.0)

来自msdn的例子(经过修改,因为升级到MSXML6.0,有些关键字不太一样了),

需要文件books.xmlbooks.vsd(博客只支持xml文件,vsd修改后缀就可以)

 #include <stdio.h>
#import <msxml6.dll>
using namespace MSXML2; int main(int argc, char* argv[])
{
HRESULT hr; CoInitialize(NULL); IXMLDOMDocument3Ptr pXMLDoc;
hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument60));
if (FAILED(hr)) {
printf("Failed to CreateInstance on an XML DOM");
return -;
}
pXMLDoc->async = VARIANT_FALSE;
pXMLDoc->validateOnParse = VARIANT_FALSE;
hr = pXMLDoc->setProperty("MultipleErrorMessages", VARIANT_TRUE);
if (FAILED(hr)){
printf("Failed to enable mulitple validation errors\n");
return -;
}
if(pXMLDoc->load("..\\books.xml")!=VARIANT_TRUE){
printf("Failed to load DOM from books.xml. %s\n",
(LPCSTR)pXMLDoc->parseError->reason);
return -;
} IXMLDOMDocument3Ptr pXSDDoc;
hr = pXSDDoc.CreateInstance(__uuidof(DOMDocument60));
if (FAILED(hr)) {
printf("Failed to CreateInstance on an XSD Doc");
return -;
}
pXSDDoc->async = VARIANT_FALSE;
pXSDDoc->validateOnParse = VARIANT_FALSE;
if(pXSDDoc->load("..\\books.xsd")!=VARIANT_TRUE){
printf("Failed to load XSD from books.xsd. %s\n",
(LPCSTR)pXSDDoc->parseError->reason);
return -;
} IXMLDOMSchemaCollectionPtr pSCache;
hr = pSCache.CreateInstance(__uuidof(XMLSchemaCache60));
if (FAILED(hr)) {
printf("Cannot instantiate XMLSchemaCache50\n");
return -;
}
pXMLDoc->schemas = pSCache.GetInterfacePtr(); hr = pSCache->add("urn:books", pXSDDoc.GetInterfacePtr());
if (FAILED(hr)) {
printf("Cannot add 'urn:books' to schema cache.\n");
return -;
} printf("Validating DOM...\n");
// Validate the entire DOM object.
IXMLDOMParseError2Ptr pError =pXMLDoc->validate();
if (pError->errorCode != ) {
printf("invalid dom:\n\treason:\n%s",
(LPCSTR)pError->reason);
printf("\terrorXPath:\n%s",
(LPCSTR)pError->errorXPath);
printf("\nParameters Count: %d\n",
pError->errorParametersCount); for (int i=; i<pError->errorParametersCount; i++){
printf("\terrorParameters(%d): %s\n",
i, (LPCSTR)pError->errorParameters(i));
}
}else{
printf("\tDOM is valid:\n%s\n",
(LPCSTR)pXMLDoc->xml);
} printf("\n\nValidating nodes...\n");
MSXML2::IXMLDOMNodeListPtr pNodeList;
pNodeList = pXMLDoc->selectNodes("//book");
for (int i=; i<pNodeList->length; i++){
pError = pXMLDoc->validateNode(pNodeList->item[i]);
if (pError->errorCode != ) {
printf("\nNode %d is invalid:\n\treason: %s", i,
(LPCSTR)pError->reason);
printf("\terrorXPath:\n%s",
(LPCSTR)pError->errorXPath);
printf("\nParameters Count: %d\n",
pError->errorParametersCount);
for (int j=; j<pError->errorParametersCount; j++){
printf("\terrorParameters(%d): %s\n",
j, (LPCSTR)pError->errorParameters(j));
}
}else{
MSXML2::IXMLDOMNodePtr pNode=pNodeList->item[i];
printf("\nNode %d is valid:\n%s\n", i,
(LPCSTR)pNode->xml);
}
} pError.Release();
pXMLDoc.Release();
pNodeList.Release();
pSCache.Release();
pXSDDoc.Release(); CoUninitialize();
return ;
}

注:MSXML2::IXMLDOMNodeListPtr与MSXML2::IXMLDOMNodePtr,命名空间重复,显示指明命名空间即可

其他参考:XML实例入门1

XML实例入门2的更多相关文章

  1. XML实例入门1

    虽然网上会有XML入门或者多少天教会XML,一般都是从普通的功能概念开始啰嗦,个人还是比较喜欢从实例开始,遇到不懂直接查(不过这次选了一个比较难得例子,研究了好久^_^).刚开始看了一个vc6.0XM ...

  2. XML新手入门 创建构造良好的XML(1)

    XML新手入门 创建构造良好的XML(1) 2009-03-19 09:24 Kay Whatley IBM Developerworks 我要评论(0) 字号:T | T 本文描述了构建良好的XML ...

  3. React实例入门教程(1)基础API,JSX语法--hello world

      前  言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发 ...

  4. 【原创】React实例入门教程(1)基础API,JSX语法--hello world

    前  言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发效率 ...

  5. springboot + kafka 入门实例 入门demo

    springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...

  6. springboot + mybatisPlus 入门实例 入门demo

    springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ...

  7. Python导出Excel为Lua/Json/Xml实例教程(三):终极需求

    相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 Python导出E ...

  8. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

  9. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

随机推荐

  1. sublime text 2中Windows下编写的脚本在Linux平台上运行遇到字符问题

    今天在windows下的sublime text 2下写了个脚本,上传到ubuntu服务器中执行后提示: -bash: /usr/bin/python: /usr/bin/python^M: bad ...

  2. Web应用的部署

    本文将介绍一些Web应用的部署: 部署规则 要成功地部署一个Web应用,必须遵循以下目录结构. 1.WEB-INF一定要直接放到应用上下文(Webapp)之下. 2.classes目录必须直接放在WE ...

  3. MySQL常用命令及操作

    1.登录与退出    1)登录        windows下直接在DOS命令窗口用root用户登录输入mysql回车;        linux下输入使用PUTTY连接mysql的服务器,然后输入: ...

  4. C/C++使用Lu脚本协程

    欢迎访问Lu程序设计 C/C++使用Lu脚本协程 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32.h,相信你会找到并正 ...

  5. SharePreferences类的使用

    简述:以key-value键值对的方式将数据保存到Android自身定义的文件夹(/data/data/<package name>/shared_prefs  root才可见的文件夹)中 ...

  6. django之HttpRequest对象

    class HttpRequest[source] 属性 所有的属性都是只读的,除非另有说明 HttpRequest.scheme 字符串(http/https)表示http还是https请求 Htt ...

  7. python 通过ntlm验证下载文件

    最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...

  8. 本地拦截genymotion或者Android模拟器的网络请求

    我们在主机上面运行了Burp或者fiddler,那么代理已经监听在本机的8080端口了. 那么我们需要在模拟器中进行如下设置: 1.在设置中,长按当前连接的wifi网络,弹出如下: 2. 点击修改网络 ...

  9. 用Express搭建 blog (一)

    Info 公司马上要举行 hack day 了,这次决定和小伙伴用 Express 作为框架来搭建我们的应用,所以昨天搭出来UI后,今天开始系统的学习下 Express. Start 首先是expre ...

  10. 微软Code Hunt答案(00-05)——沉迷娱乐的我

    昨天看到微软出的网游Code Hunt.o(∩_∩)o...哈哈,还不好好玩一吧,个人感觉不是一个模块比一个模块难的,Code Hunt是按功能划分.所以不要怕自己做不来.由于不同人特长不一样. 像A ...