XML实例入门1
虽然网上会有XML入门或者多少天教会XML,一般都是从普通的功能概念开始啰嗦,个人还是比较喜欢从实例开始,遇到不懂直接查(不过这次选了一个比较难得例子,研究了好久^_^)。刚开始看了一个vc6.0XML的例子,调通了,不过要用VS2008开发,想移植到VS2008,挺麻烦的,就没咋看,有需要可以下载看看。
工具: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;
IXMLDOMDocument3Ptr pXSDDoc;
IXMLDOMSchemaCollectionPtr pSCache;
IXMLDOMParseError2Ptr pEitem;
IXMLDOMParseError2Ptr pError; 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 multiple 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 -;
} 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 -;
} hr = pSCache.CreateInstance(__uuidof(XMLSchemaCache60));
if(FAILED(hr)){
printf("Cannot instantiate XMLSchemaCache60\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 -;
} //Validate the entire DOM object.
pError = pXMLDoc->validate();
if(pError->errorCode != ){
printf("Error as returned from validate():\n\n");
printf("\tError Code: %d\n", pError->errorCode);
printf("\tError reson: \n%s", (LPCSTR)pError->reason);
printf("\tError location: \n%s\n", (LPCSTR)pError->errorXPath);
printf("\tErrors count: %d\n", pError->allErrors->length);
printf("\nError items from the allErrors collection:\n"); for(int i=;i<pError->allErrors->length;i++){
pEitem = pError->allErrors->item[i];
printf("\nErrorItem[%d]:\n", i);
printf("\treason:\n%s", (LPCSTR)pEitem->reason);
printf("\tlocation: \n%s\n", (LPCSTR)pEitem->errorXPath);
}
}else{
printf("valid dom as follows:\n%s\n",
(LPCSTR)pXMLDoc->xml);
} pError.Release();
pEitem.Release();
pXMLDoc.Release();
pXSDDoc.Release();
pSCache.Release(); CoUninitialize();
return ;
}
注:1、pXMLDoc->load("..\\books.xml"),文件路径是工程根目录
2、例子是XSD对XML文件的validate
3、把不懂的地方查懂XML入门是没问题
XML实例入门1的更多相关文章
- XML实例入门2
工具:notepad++.VS2008(MSXML6.0) 来自msdn的例子(经过修改,因为升级到MSXML6.0,有些关键字不太一样了), 需要文件books.xml,books.vsd(博客只支 ...
- 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导出 ...
随机推荐
- SqlServer导库语句
GO /****** 对象: StoredProcedure [dbo].[sp_ExportDatabase] 脚本日期: 07/18/2013 12:37:26 ******/ SET ANSI_ ...
- JqMobi学习
JqMobi+phonegap+html5 开发Android.ios应用
- C#获得命令提示符输出
原文:http://blog.csdn.net/abrahu/article/details/6611504 C#获得命令提示符输出 分类: c#应用程序2011-07-16 23:34 600人阅读 ...
- CreateFileMapping共享内存时添加Global的作用
来源:http://www.cnblogs.com/elvislogs/articles/ShareMemory.html 通常使用CreateFileMapping建立共享内存时名称中没有加入&qu ...
- Linux文件系统与结构
一.Linux文件系统结构 /bin 二进制的缩写,用来放置可执行的二进制程序,基本命令 /boot 用来存放启动文件,kernel 和boot配置文件 /dev 用来放置设备文件 /dev/cons ...
- 9.java.lang.ClassCastException
java.lang.ClassCastException 数据类型转换异常 当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常,如下列代码. Object o ...
- ArcEngine 9.3 学习笔记(六):图层符号化(COlorRamp,MarkerSymbol,LineSymbol,FillSymbol,TextSymbol,3DChartSymbol,使用ServerStyle符号库,FeatureRender,RasterRender)
第四章 图层符号化 AE9.3 提供了SymbologyControl控件,用于显示ARCGIS符号库中的符号. 组件库中的组件对象分为Color(颜色),Symbol(符号),Render(渲染)三 ...
- Oracle EBS-SQL (BOM-6):检查物料失效但BOM中未失效的数据.sql
select msi.segment1 装配件编码 , msi.description 装配件描述 , msi.item_type ...
- 解决Qt程序发布时中文乱码问题(通过QApplication.addLibraryPath加载QTextCodec插件)
Qt程序的文字编码,是通过插件来解决的,所以我们发布的时候需要把相应的插件也发布出去,在开发者电脑上程序会自动从插件目录加载到插件,但是如果发布给别的电脑使用,需要手动指定插件路径,如下所示: int ...
- 如何在IE8下调试OCX控件
第一种方式 多进程模式下, 在IE8打开web页面, 然后在调试菜单选择附加到进程, 这时看到2个IE进程, 选择没有带标题的, 也就是主进程, 就可以正常调试了. 此方式比较麻烦, 不能F5直接启动 ...