XML实例入门2
工具:notepad++、VS2008(MSXML6.0)
来自msdn的例子(经过修改,因为升级到MSXML6.0,有些关键字不太一样了),
需要文件books.xml,books.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的更多相关文章
- XML实例入门1
虽然网上会有XML入门或者多少天教会XML,一般都是从普通的功能概念开始啰嗦,个人还是比较喜欢从实例开始,遇到不懂直接查(不过这次选了一个比较难得例子,研究了好久^_^).刚开始看了一个vc6.0XM ...
- XML新手入门 创建构造良好的XML(1)
XML新手入门 创建构造良好的XML(1) 2009-03-19 09:24 Kay Whatley IBM Developerworks 我要评论(0) 字号:T | T 本文描述了构建良好的XML ...
- React实例入门教程(1)基础API,JSX语法--hello world
前 言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发 ...
- 【原创】React实例入门教程(1)基础API,JSX语法--hello world
前 言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发效率 ...
- springboot + kafka 入门实例 入门demo
springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...
- springboot + mybatisPlus 入门实例 入门demo
springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ...
- Python导出Excel为Lua/Json/Xml实例教程(三):终极需求
相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 Python导出E ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
随机推荐
- 替换Gravatar头像默认服务器
这几天Gravatar头像服务器应该集体被墙了,头像无法显示.兵来将挡,水来土掩,上有政策,下有对策,和谐社会靠大家,哈. 利用多说Gravatar头像中转服务器替代头像默认服务器. 将下面代码添加到 ...
- 开发环境配置--Ubuntu+Qt4+OpenCV(三)
同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...
- mysql学习(八)数据表类型-字符集
数据存储引擎: MyISAM:强化快速读取操作. 也有缺点.一些功能不支持 InnoDB:支持一些MyIASM一些不支持的功能 缺点:占用空间大 对比 ...
- python基础教程
转自:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html Python快速教程 作者:Vamei 出处:http://www.cn ...
- Android Studio之build.gradle小技巧
一: 当你工程引用android 的support包的时候,常常会这样写: dependencies { compile 'com.android.support:recyclerview-v7:22 ...
- jquery中的全局事件
ajaxStart(callback):Ajax请求开始时触发该事件 ajaxSend(callback):Ajax请求发送前触发该事件 ajaxSuccess(callback):Ajax请求成功时 ...
- Composer加速
在composer.json中添加{ "repositories": [ {"type": "composer", "url&qu ...
- javascript 汉字拼音排序
定义和用法 用本地特定的顺序来比较两个字符串. 语法 stringObject.localeCompare(target) 参数 描述 target 要以本地特定的顺序与 stringObject 进 ...
- Hibernate 多表关联映射- 一对多关系映射(one-to-many)
Hibernage.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...
- [Regionals 2012 :: Asia - Tokyo ]
链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=56 ...