以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 DOM/SAX/XPath 』 (http://bbs.xml.org.cn/list.asp?boardid=11) ---- 利用VC++与MSXML解析XML文档 (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=23546) |
-- 作者:lizlex -- 发布时间:10/25/2005 9:38:00 PM -- 利用VC++与MSXML解析XML文档 一、文档对象模型(DOM) DOM是Document Object Model(文档对象模型)的简称,是对XML文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。 DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括: ● 描述文档表示和操作的接口; ● 接口的属性和方法; ● 接口之间的关系以及互操作。 DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对象,不管是根节点还是实体的属性。 在DOM中主要有以下三个对象: ● XML文档对象 XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。 ● XML节点对象 XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。 ● XML节点列表 XML文档模块列表代表了节点的集合。 利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。 |
-- 作者:lizlex -- 发布时间:10/25/2005 9:42:00 PM -- 二、DOM的四个基本接口(引用自:http://bbs.xml.org.cn/dispbbs.asp?boardID=11&ID=9220) 在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Documet,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。 关于Document接口的IDL(Interface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。 |
-- 作者:lizlex -- 发布时间:10/25/2005 9:45:00 PM -- 三、MSXML 从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COM(Component Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。 MSXML.DLL所包括的主要COM接口有: 1. IXMLDOMDocument(Document接口) DOMDocument对象是XML DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。 2. IXMLDOMNode(Node接口) IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。 3. IXMLDOMNodeList IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环 "结构来遍历所有的节点。 4. IXMLDOMParseError IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。 在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode 的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的setAttribute和getAttribute方法来设置和获得节点的属性。 |
-- 作者:wFirebird -- 发布时间:1/11/2006 1:40:00 PM -- 如此好的帖子不顶对不起自己~ 顶 |
-- 作者:flamingheart -- 发布时间:1/17/2006 2:29:00 PM -- 确实是好贴,我顶 |
-- 作者:Sally059 -- 发布时间:2/11/2006 12:22:00 AM -- 看了你的帖子才决定注定本论坛的,真好 |
-- 作者:guttas -- 发布时间:2/11/2006 10:56:00 AM -- 这个是好贴,,顶一下 |
-- 作者:victor110 -- 发布时间:2/20/2006 5:27:00 PM -- 好!太好了! |
-- 作者:zz277 -- 发布时间:4/16/2006 4:40:00 PM -- 好东东 |
-- 作者:flyskytoday -- 发布时间:4/25/2006 4:12:00 PM -- load时,作者和标题无法得出啊~ 有啥好方法呢? |
-- 作者:jnglz -- 发布时间:4/27/2006 9:47:00 AM -- 太好了,非常感谢,正是我需要的东西哦!谢谢楼主! |
-- 作者:jnglz -- 发布时间:5/12/2006 8:30:00 AM -- 谢谢,真的很不错! |
-- 作者:jnglz -- 发布时间:5/15/2006 8:48:00 AM -- 我也想问一个问题:现在是得到了book的ID值,如果想要author 和title的值该用什么函数啊?昨天试了好久都不行,谢谢 |
-- 作者:Abner -- 发布时间:5/16/2006 10:06:00 AM -- 能否给出一些具体使用的例子 |
-- 作者:zhangtianqi -- 发布时间:5/26/2006 10:30:00 AM -- 下载原程序是对的,只是自己重头建工程按部做后,一按键就显示 “无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!” 为什么无法创建DOMDocument对象,前期还需要那些设定。 我是XML新手,清高手指教,谢谢!!!!! |
-- 作者:sd3377312 -- 发布时间:5/30/2006 5:27:00 PM -- 好东西啊!我正要用呢!谢谢楼主,最好能给出具体实例. |
-- 作者:ming4098 -- 发布时间:6/6/2006 2:10:00 PM -- 怎么我下载后运行load的时候报错了,是不正常中止? |
-- 作者:ynjxxk -- 发布时间:6/8/2006 9:35:00 AM -- 好东东,就应该大家分享!顶 |
-- 作者:shiliang -- 发布时间:7/7/2006 10:04:00 AM -- 好呀,不过不知道是不是在EVC下是怎么样进行操作的,在此请教一下,感激不尽!!! |
-- 作者:joyjjjz -- 发布时间:7/10/2006 2:27:00 PM -- 看了你的帖子才决定注定本论坛的,真好 |
-- 作者:joyjjjz -- 发布时间:7/10/2006 2:28:00 PM -- 看了你的帖子才决定注定本论坛的,真好 |
-- 作者:sjz2006 -- 发布时间:7/17/2006 6:58:00 PM -- 使劲顶啊 |
-- 作者:sjz2006 -- 发布时间:7/17/2006 6:58:00 PM -- 再顶!!! |
-- 作者:daor -- 发布时间:7/24/2006 6:04:00 PM -- 这个帖子, 不顶能行吗 |
-- 作者:zuhause -- 发布时间:7/28/2006 4:05:00 AM -- 学习了! |
-- 作者:longshentailang -- 发布时间:7/29/2006 3:38:00 PM -- Perfect! 的确是好东西! |
-- 作者:fwn7432650 -- 发布时间:8/1/2006 5:57:00 PM -- nice so nice |
-- 作者:wangmeijvan -- 发布时间:9/27/2006 11:17:00 AM -- 找了很久了~~谢谢lz |
-- 作者:glh1023 -- 发布时间:9/29/2006 4:28:00 PM -- thank you ! |
-- 作者:liuyasu1117 -- 发布时间:11/2/2006 3:54:00 PM -- 顶!!!!!!!!!!!!NB |
-- 作者:startbug -- 发布时间:11/17/2006 1:59:00 PM -- 学习 |
-- 作者:wdxheb -- 发布时间:11/27/2006 10:58:00 AM -- 我喜欢. |
-- 作者:cx_hhddy223 -- 发布时间:11/28/2006 4:06:00 PM -- 好,真是需要的,多谢! |
-- 作者:inanter -- 发布时间:12/8/2006 11:10:00 AM -- 好,顶一个 |
-- 作者:inanter -- 发布时间:12/8/2006 11:42:00 AM -- //创建DOMDocument对象 HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if(!SUCCEEDED(hr)) { MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"); return ; } 我已安装了msxml3.msi,难道不是这文件? |
-- 作者:skate -- 发布时间:12/11/2006 1:19:00 PM -- up |
-- 作者:cx_hhddy223 -- 发布时间:12/12/2006 3:06:00 PM -- thanks a lot! |
-- 作者:aigo -- 发布时间:2/8/2007 9:36:00 AM --
|
-- 作者:baboai -- 发布时间:2/15/2007 2:31:00 PM -- 怎么说呢?解说的很好,有例子使得理解起来更简单 |
-- 作者:nettzar -- 发布时间:2/26/2007 12:50:00 PM -- 确实是好贴,我顶 |
-- 作者:edward007 -- 发布时间:4/4/2007 11:24:00 AM -- 不错的东西哦,支持一下 |
-- 作者:e1022 -- 发布时间:4/4/2007 10:04:00 PM -- 确实很好,但是为什么使用msxml4.dll呢? |
-- 作者:sgb349 -- 发布时间:4/5/2007 5:26:00 PM -- 不断关注中…… |
-- 作者:greatken -- 发布时间:4/6/2007 3:59:00 PM -- GOOD |
-- 作者:derry755 -- 发布时间:4/9/2007 3:38:00 PM -- 不错,很有收获 |
-- 作者:minmin0876 -- 发布时间:4/25/2007 2:47:00 PM -- 加油 学习中 |
-- 作者:xeyu -- 发布时间:5/8/2007 10:36:00 PM -- 谢谢了 |
-- 作者:cheng-liang008 -- 发布时间:5/11/2007 2:06:00 PM -- hao! |
-- 作者:hgshc -- 发布时间:5/15/2007 5:34:00 PM -- 3q |
-- 作者:tiddy -- 发布时间:6/6/2007 4:36:00 PM -- 好帖啊,不能不定 |
-- 作者:tiddy -- 发布时间:6/6/2007 4:37:00 PM -- 支持啊 |
-- 作者:lengse39 -- 发布时间:6/22/2007 10:10:00 AM -- 这个帖子真得特别好, 可是有没有在VC中用SAX解析XML的例子呢? |
-- 作者:lengse39 -- 发布时间:6/22/2007 10:10:00 AM -- 这个帖子真得特别好, 可是有没有在VC中用SAX解析XML的例子呢? |
-- 作者:mycatboys -- 发布时间:6/25/2007 10:29:00 PM -- 好贴啊 收藏了
------------------------------------------------------------------------------ |
-- 作者:dolphinyuan -- 发布时间:7/17/2007 11:06:00 AM -- 很不错,谢谢。 |
-- 作者:ftluo2295 -- 发布时间:10/18/2007 3:47:00 PM -- 非常不错 非常不错,欢迎大家交流! E-Mail:ftluo2295@163.com QQ:27622931 |
-- 作者:ftluo2295 -- 发布时间:10/18/2007 3:48:00 PM -- 非常不错,欢迎大家交流!!! E-Mail:ftluo2295@163.com QQ:27629331 |
-- 作者:howen031 -- 发布时间:11/20/2007 5:28:00 PM -- 正要学习XML,好东西,顶起. |
-- 作者:tweens -- 发布时间:11/21/2007 2:52:00 PM -- 顶起! |
-- 作者:kingdream -- 发布时间:11/28/2007 4:43:00 PM -- 谢谢,也正需要这东西.好好看看. |
-- 作者:kuerzhao -- 发布时间:12/5/2007 10:02:00 AM -- 好东西,真的是帮了大忙了 |
-- 作者:lion_xwz -- 发布时间:12/13/2007 4:55:00 PM -- 谢谢 |
-- 作者:litt -- 发布时间:12/18/2007 9:30:00 PM -- 下载下来慢慢学习~谢谢分享! |
-- 作者:achihit -- 发布时间:3/23/2008 3:20:00 PM -- 我也遇到看同样的问题。 在创建对象之前应该初始化。 CoInitialize(NULL); //加上这句 HRESULT hr; 这样运行就能得到正确结果。 |
-- 作者:seanduniv -- 发布时间:5/4/2008 11:21:00 AM -- DDDDDDDDD 强贴! |
-- 作者:peng9527 -- 发布时间:5/21/2008 4:00:00 PM -- thanks |
-- 作者:华山虎 -- 发布时间:5/23/2008 4:59:00 PM -- 程序的最好可以显示author和Title的内容吗? 如果能显示那才叫奇怪了。 居然显示出来的结果是attributes |
-- 作者:lylyjiejie -- 发布时间:7/7/2008 5:03:00 PM -- 非常好!赞一个! |
-- 作者:dell1234 -- 发布时间:1/10/2009 6:01:00 PM -- 非常好的XML编程介绍。顶!!! |
-- 作者:sccxboy -- 发布时间:3/20/2009 10:42:00 AM -- 如此好贴 我要狂顶 |
-- 作者:seu071189 -- 发布时间:4/2/2009 9:39:00 AM -- 不错不错 |
-- 作者:酸酸果 -- 发布时间:4/2/2009 3:18:00 PM -- 顶!!!! |
-- 作者:isabc -- 发布时间:6/14/2009 4:09:00 PM -- 真不错!!!! |
-- 作者:gz_wood -- 发布时间:8/11/2009 4:53:00 PM -- 虽然还没看懂, 先顶一个 |
-- 作者:hexun831012 -- 发布时间:8/12/2009 9:42:00 PM -- 最近又捡起了C++,越看越觉得C++垃圾,呵呵 |
-- 作者:chencalla -- 发布时间:1/20/2010 8:29:00 AM -- 呵呵,谢谢了哦…… |
-- 作者:slvher -- 发布时间:2/22/2010 9:01:00 PM -- 谢谢楼主分享~ 论坛有你更精彩! |
-- 作者:slvher -- 发布时间:2/22/2010 9:41:00 PM -- 楼主 你的程序好像有点问题啊 author和title的值没办法显示 生成xml文档的时候需要输入三个值,load的时候只有ID这个值是真正通过程序载入的,而其它两个值是之前输入时保存好的值,并非通过程序访问xml文档得到,所以点击load按钮时,即使对话框能显示三个值也只是假象。 |
-- 作者:yahoo12345 -- 发布时间:3/19/2010 8:40:00 AM -- 谢谢楼主的分享!很实用 值得学习!谢谢 |
-- 作者:crafet -- 发布时间:4/28/2010 4:15:00 PM -- 先顶后看,谢谢分享呀 |
-- 作者:rzhgd -- 发布时间:6/12/2011 9:00:00 PM -- 好东西,顶! |
-- 作者:sdllaiye -- 发布时间:10/23/2011 11:56:00 AM -- 喜欢狂顶。。。。。。。。。。。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
330.078ms |