MSXML的DOM模型处理XML
http://tech.ddvip.com 2007年10月25日 社区交流
内容摘要:通过MSXML类库的使用理解XML文件处理模型中基于文档对象模型(DOM)的处理
使用MSXML对XML文件进行处理较早就已经接触到了,也写过一篇叫“XML文件的处理思考”的随笔,不经意用google搜索一下这篇文章,发现竟然被很多网站转载,版权就不用提,看到不汗颜就已经不错。其实也不是特意厚颜去google一下,在mblogger.cn的博客可以查看链接,发觉这个文章的搜索比较多来自google。到了现在,回头去看看这篇文章,冷汗直冒啊!在说明里面的缺陷以前还是先花点时间先把DOM的主要结构说一下,方便后面的理解。如果不了解怎么开始使用MSXML,看看刚才提到的这篇文章还是有点用的,地址:http://ms.mblogger.cn/ohahu/posts/4563.aspx
DOM模型在MSXML类库中的主要表现为把XML文件倒入内存,形成一个IXMLDOMDocument,再把其中的每一个部件都用一个接口对应起来。因为还没用MSXML进行过XSLT格式化XML文件,所以这相关的也只好避而不谈了。先来个有XML基本部件的文本:
(1)<?xml version='1.0' encoding='GB2312'?>
(2)<?xml-stylesheet type='text/xsl' href='/expert/Xsl/2.xsl'?>
(3)<body>
(4) <code1 id=”text”>文本</code>
(5) <code2 id=”cdata”>
(6) <![CDATA[
(7) 这里是CDATA的内容,可以放类似’<’等可能会和XML控制信息有冲突的内容
(8) ]]>
(9) </code>
(10)</body>
为了表述方便,在第一列都放上了行号。首先从(1)~(10)够成了一个Document,在MSXML中对应IXMLDOMDocument接口;(1)行、(2)行对应MSXML中的接口为IXMLDOMProcessingInstruction;(3)行到(10)行则为一个Root Element,对应的接口为IXMLDOMElement,(3)里面包含的多个<code>也是element,不过是body的下一层element。需要注意的是Root只能有一个,Root下面无论多深,理论上允许无数多个(?),且允许名称重复;(4)和(5)里面各有一个id=”?”这是一个attribute(注意:(1)和(2)行version;encoding;type;href等也是),对应MSXML里的IXMLDOMAttribute;(4)里面的“文本”看起来和(7)这一行是差不多的,都是文本信息,很多人以为都可以通过get_text()直接得到(不久以前我也以为),其实是错的。对于“文本”是可以通过(4)这个element直接get_text()获取,对应于IXMLDOMText,但如果在(5)这个element直接get_text()就会出错,原因?CDATA是区别于“文本”的另外一种类型,对应于IXMLDOMCDATASection,如何获取,后面再提。现在整个XML的基本框架似乎出来了:
责编:豆豆技术应用