`
isiqi
  • 浏览: 16136025 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

XML 相关总结[转载]

阅读更多
XML 相关总结
经过昨天的学习,了解到DOM只是提供了一种解析XML的方式(接口),而DOM的接口与语言无关。对DOM接口的实现有微软的MSXML,Xerces-C(Apache),Java的XML4J等。下面对DOM和MSXML的几个接口分别介绍(网上资料,经整理):
一.DOM的四个基本接口
DOM接口规范中,有四个基本的接口:DocumentNodeNodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,像DocumetElementAttributeTextComment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。
1Document接口
Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
DOM树中,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。
关于Document接口的IDLInterfaceDefinitionLanguage接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。
2Node接口
Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,ElementAttrCDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。
3NodeList接口
NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName
DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOMElement节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。
4NamedNodeMap接口
实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。与NodeList相同,在DOM中,NamedNodeMap对象也是“live”的。
二.MSXML的几个重要接口
从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COMComponentObjectModel)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VBVCDELPHIC++Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。
MSXML.DLL所包括的主要COM接口有:
1.IXMLDOMDocumentDocument接口)
DOMDocument对象是XMLDOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSLXSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
2.IXMLDOMNodeNode接口)
IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
3.IXMLDOMNodeList
IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环"结构来遍历所有的节点。
4.IXMLDOMParseError
IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。
在具体应用时可以用DOMDocumentLoad方法来装载XML文档,用IXMLDOMNodeselectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用createNodeappendChild方法来创建节点和追加节点,用IXMLDOMElementsetAttributegetAttribute方法来设置和获得节点的属性。
三.Document属性和方法
Document 属性
async
属性说明
async 属性表示是否允许异步的下载。
基本语法
boolValue XMLDocument.async;
XMLDocument.async boolValue;
语法说明
布尔值是可擦写的(read/write),如果准许异步下载,值为True;反之则为False
使用范例
xmlDoc.async "false";
alert(xmlDoc.async);
attributes
属性说明
传回目前节点的属性列表
基本语法
objAttributeList = xmlNode.attributes;
语法说明
传回一个物件。如果此节点不能包含属性,则传回空值。
使用范例
objAttList xmlDoc.documentElement.attributes;
alert(objAttList);
childNodes
属性说明
传回一个节点清单,包含该节点所有可用的子节点。
基本语法
objNodeList=node.childNodes;
语法说明
传回一个物件。假如这节点没有子节点,传回null
使用范例
objNodeList xmlDoc.childNodes;
alert(objNodeList);
doctype
属性说明
传回文件型态节点,包含目前文件的DTD。这节点是一般的文件型态宣告,例如,节点<!DOCTYPE EMAIL SYSTEM "LstA_2.dtd">,名为EMAIL 的节点物件会被传回。
基本语法
objDocType=xmlDocument.doctype;
语法说明
传回一个对象,这个属性是只读的。假如这文件不包含DTD,会传回null
使用范例
objDocType xmlDoc.doctype;
alert(objDocType.nodeName);
documentElement
属性说明
确认XML 文件的根(Root)节点。
基本语法
objDoc=xmlDocument.documentElement;
语法说明
返回一个在单一根文件元素中包含数据的对象。此属性可读/写,如果文件中不包含根节点,将传回null
使用范例
objDocRoot xmlDoc.documentElement;
alert(objDocRoot);
firstChild
属性说明
确认在目前节点中的第一个子元素。
基本语法
objFirstChild xmlDocNode.firstChild ;
语法说明
此属性只读且会传回一对象,如果节点中没有包含第一个子元素,将传回null
使用范例
objFirstChild xmlDoc.documentElement.firstChild;
alert(objFirstChild);
implementation
属性说明
DOM 应用程序能使用其它实作中的对象。implementation 属性确认目前XML 文件的DOMimplementation 对象。
基本语法
objImplementation xmlDocument.implementation;
语法说明
此属性只读且传回一个对象。
使用范例
objImp xmlDoc.implementation;
alert(objImp);
lastChild
属性说明
确认目前节点中最后的子元素。
基本语法
objLastChild xmlDocNode.lastChild;
语法说明
此属性只读且传回一个对象。如果节点中没有包含最后子元素,将传回null
使用范例
objLastChild xmlDoc.documentElement.lastChild;
alert(objLastChild);
nextSibling
属性说明
在目前文件节点的子节点列表中传回下一个兄弟节点。
基本语法
objNextSibling xmlDocNode.nextSibling;
语法说明
此属性是只读且传回一个对象。如果节点中没有包含其它的相关节点,会传回null
使用范例
objSibling xmlDoc . documentElement. childNodes.item(1) . nextSibling;
alert(objSibling);
nodeName
属性说明
传回代表目前节点名称的字符串。
基本语法
strNodeName xmlDocNode.nodeName ;
语法说明
传回一个字符串。这个属性是只读的,传回元素名称、属性或实体参照。
使用范例
strNodeName xmlDoc.documentElement.nodeName;
alert(strNodeName);
nodeType
属性说明
辨识节点的DOM 型态
基本语法
numNodeType xmlDocNode.nodeType ;
语法说明
此属性只读且传回一个数值
有效的数值符合以下的型别:
1-ELEMENT
2-ATTRIBUTE
3-TEXT
4-CDATA
5-ENTITY REFERENCE
6-ENTITY
7-PI (processing instruction)
8-COMMENT
9-DOCUMENT
10-DOCUMENT TYPE
11-DOCUMENT FRAGMENT
12-NOTATION
使用范例
numNodeType xmlDoc.documentElement.nodeType;
alert(numNodeType);v</DIV></TD></TR></TBODY></TABLE>
<DIV class=content>
nodeValue
属性说明
传回指定节点相关的文字。这并非一个元素中数据的值,而是与一个节点相关且未解析的文字,就像一个属性或者一个处理指令
基本语法
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics