XML 相关总结
经过昨天的学习,了解到DOM只是提供了一种解析XML的方式(接口),而DOM的接口与语言无关。对DOM接口的实现有微软的MSXML,Xerces-C(Apache),Java的XML4J等。下面对DOM和MSXML的几个接口分别介绍(网上资料,经整理):
一.DOM的四个基本接口
在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,像Documet,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。
1、Document接口
Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
在DOM树中,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。
关于Document接口的IDL(Interface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。
2、Node接口
Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。
3、NodeList接口
NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName。
在DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。
4、NamedNodeMap接口
实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。与NodeList相同,在DOM中,NamedNodeMap对象也是“live”的。
二.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方法来设置和获得节点的属性。
三.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
|
属性说明
|
传回指定节点相关的文字。这并非一个元素中数据的值,而是与一个节点相关且未解析的文字,就像一个属性或者一个处理指令
|
基本语法
|
varNodeValue = xmlDocNode.nodeValue;
| |
语法说明
|
传回的文字代表了以节点的nodeType 属性为主的型态值。因为节点型态可能是几种数据型态中的一种,传回值也因此有差异。传回null 的节点型态有:DOCUMENT、ELEMENT、DOCUMENT TYPE、DOCUMENT FRAGMENT、ENTITY、ENTITY REFERENCE,和NOTATION。此属性可擦写。
| |
使用范例
|
varNodeValue = xmlDoc.documentElement.nodeValue;
alert(varNodeValue);
| |
ondataavailable
|
属性说明
|
指定一个事件来处理ondataavailable 事件。
|
基本语法
|
xmlDocNode.ondataavailable = value;
| |
语法说明
|
此属性是唯写,允许文件作者一旦数据为可用,即可尽快的使用数据来运作。
| |
使用范例
|
xmlDoc.ondataavailable = alert("Data is now available.");
| |
onreadystatechange
|
属性说明
|
指定一个事件来处理onreadystatechange 事件。这个事件能辨识readyState 属性的改变。
|
基本语法
|
xmlDocNode.onreadystatechange = value;
| |
语法说明
|
此属性是唯写的,允许文件作者指定当readyState 属性改变时呼叫事件。
| |
使用范例
|
xmlDoc.onreadystatechange =
alert("The readyState property has changed.");
| |
ownerDocument
|
属性说明
|
传回文件的根节点,包含目前节点。
|
基本语法
|
objOwnerDoc = xmlDocument.ownerDocument;
| |
语法说明
|
此属性是只读的,传回一个包含文件根节点的对象,包含特定的节点。
| |
使用范例
|
objOwnerDoc = xmlDoc.childNodes.item(2).ownerDocument;
alert(objOwnerDoc);
| |
parentNode
|
属性说明
|
传回目前节点的父节点。只能应用在有父节点的节点中。
|
基本语法
|
objParentNode = xmlDocumentNode.parentNode;
| |
语法说明
|
此属性是只读的,传回包含指定节点的父节点对象。如果此节点不存在于文件树中,将传回null。
| |
使用范例
|
objParentNode = xmlDoc.childNodes.item(1).parentNode;
alert(objParentNode);
| |
parseError
|
属性说明
|
传回一个DOM 解析错误对象,此对象描述最后解析错误的讯息。
|
基本语法
|
objParseErr = xmlDocument.parseError;
| |
语法说明
|
此属性是只读的。如果没有错误发生,将传回0。
| |
使用范例
|
objParseErr = xmlDoc.parseError;
alert(objParseErr);
| |
previousSibling
|
属性说明
|
传回目前节点之前的兄弟节点。
|
基本语法
|
objPrevSibling = xmlDocument.previousSibling;
| |
语法说明
|
传回一个对象,这个属性是只读的。若该节点没有包含前面的兄弟节点,会传回null。
| |
使用范例
|
objPrevSibling =
xmlDoc.documentElement.childNodes.item(3).previousSibling
alert(objPrevSibling);
| |
readyState
|
属性说明
|
传回XML 文件资料的目前状况。
|
基本语法
|
intState = xmlDocument.readyState;
| |
语法说明
|
这个属性是只读的,传回值有以下的可能:
0-UNINITIALIZED:XML 对象被产生,但没有任何文件被加载。
1-LOADING:加载程序进行中,但文件尚未开始解析。
2-LOADED:部分的文件已经加载且进行解析,但对象模型尚未生效。
3-INTERACTIVE:仅对已加载的部分文件有效,在此情况下,对象模型是有效但只读的。
4-COMPLETED:文件已完全加载,代表加载成功。
| |
使用范例
|
alert("The readyState property is " + xmlDoc.readyState);
| |
url
|
属性说明
|
传回最近一次加载XML 文件的URL。
|
基本语法
|
strDocUrl = xmlDocument.url;
| |
语法说明
|
这个属性是只读的,传回最近一次加载成功文件的URL,若文件仅存在主存储器中(表示该文件并非由外部档案加载),则传回null。
| |
使用范例
|
alert(xmlDoc.url);
| |
validateOnParse
|
属性说明
|
告诉解析器文件是否有效。
|
基本语法
|
boolValidate = xmlDocument.validateOnParse;
xmlDocument.validateOnParse = boolValidate;
| |
语法说明
|
此属性是可擦写的。如果传回值为true,表示文件被解析时被确认是有效的。如果传回false,表示文件是无效的,并被认为只是标准格式的(well-formed)文件。
| |
使用范例
|
xmlDoc.validateOnParse = true;
alert(xmlDoc.validateOnParse);
| |
xml
|
属性说明
|
传回指定节点的XML 描述和所有的子节点。
|
基本语法
|
xmlValue = xmlDocumentNode.xml;
| |
语法说明
|
此属性是只读的。
| |
使用范例
|
xmlValue = xmlDoc.documentElement.xml;
alert(xmlValue);</DIV>
<DIV class=content>
<DIV class=content>
| |
Document 方法
| ||
abort
|
方法说明
|
取消一个进行中的异步下载
|
基本语法
|
xmlDocument.abort();
| |
语法说明
|
如果这个方法在异步下载时被呼叫,所有的解析动作会停止,而且在内存中的文件会被释放。
| |
使用范例
|
| |
appendChild
|
方法说明
|
加上一个节点当作指定节点最后的子节点
|
基本语法
|
xmlDocumentNode.appendChild(newChild);
| |
语法说明
|
newChild 是附加子节点的地址。
| |
使用范例
|
docObj = xmlDoc.documentElement;
alert(docObj.xml);
objNewNode = docObj. appendChild(xmlDoc. documentElement.firstChild);
alert(docObj.xml);
| |
cloneNode
|
方法说明
|
建立指定节点的复制。
|
基本语法
|
xmlDocumentNode.cloneNode(deep);
| |
语法说明
|
deep 是一个布尔值。如果为true,此节点会复制以指定节点发展出去的所有节点。如果是false,只有指定的节点和它的属性被复制。
| |
使用范例
|
currNode = xmlDoc.documentElement.childNodes.item(1);
objClonedNode = currNode.cloneNode(1);
alert(objClonedNode.xml);
| |
createAttribute
|
方法说明
|
建立一个指定名称的属性。
|
基本语法
|
xmlDocument.createAttribute(name);
| |
语法说明
|
name 是被建立属性的名称。
| |
使用范例
|
objNewAtt = xmlDoc.createAttribute("encryption");
alert(objNewAtt.xml);
| |
createCDATASection
|
方法说明
|
建立一个包含特定数据的CDATA。
|
基本语法
|
xmlDocument.createCDATASection(data);
| |
语法说明
|
data 是一个字符串,且包含了被置放在CDATA 的资料。
| |
使用范例
|
objNewCDATA = xmlDoc.createCDATASection("This is a CDATA Section");
alert(objNewCDATA.xml);
| |
createComment
|
方法说明
|
建立一个包含指定数据的批注。
|
基本语法
|
xmlDocument.createComment(data);
| |
语法说明
|
data 是一个字符串,且包含了被置放在批注的资料。
| |
使用范例
|
objNewComment = xmlDoc.createComment("This is a comment");
alert(objNewComment.xml);
| |
createDocumentFragment
|
方法说明
|
建立一个空的文件片断对象。
|
基本语法
|
xmlDocument.createDocumentFragment();
| |
语法说明
|
一个新的文件片断被建立,但没有加到文件树中。要加入片断到文件树中,必须使用插入方法,例如insertBefore、replaceChild 或appendChild。
| |
使用范例
|
objNewFragment = xmlDoc.createDocumentFragment();
alert(objNewFragment.xml);
| |
createElement
|
方法说明
|
建立一个指定名称的元素。
|
基本语法
|
xmlDocument.createElement(tagName);
| |
语法说明
|
tagName 是一个区分大小写的字符串来指定新元素名称。
| |
使用范例
|
objNewElement = xmlDoc.createElement("TO");
alert(objNewElement.xml);
| |
createEntityReference
|
方法说明
|
建立一个参照到指定名称的实体。
|
基本语法
|
xmlDocument.createEntityReference(name);
| |
语法说明
|
name 是一个区分大小写的字符串,来指定新实体引用的名称。一个新的实体引用被建立,但是并没有被加到文件树中。若要将实体引用加到文件树中,必须使用一种插入方法,例如:insertBefore,replaceChild,或appendChild。
| |
使用范例
|
objNewER = xmlDoc.createEntityReference("eRef");
alert(objNewER.xml);
| |
createNode
|
方法说明
|
建立一个指定型态、名称,及命名空间的新节点。
|
基本语法
|
xmlDocument.createNode(type, name, nameSpaceURI);
| |
语法说明
|
type 用来确认要被建立的节点型态,name 是一个字符串来确认新节点的名称,命名空间的前缀则是选择性的。nameSpaceURI 是一个定义命名空间URI 的字符串。如果前缀被包含在名称参数中,此节点会在nameSpaceURI 的内文中以指定的前缀建立。如果不包含前缀,指定的命名空间会被视为预设的命名空间。
| |
使用范例
|
objNewNode = xmlDoc.createNode(1, "TO", "");
alert(objNewNode.xml);
| |
createProcessingInstruction
|
方法说明
|
建立一个新的处理指令,包含了指定的目标和数据。
|
基本语法
|
xmlDocument.createProcessingInstruction(target, data);
| |
语法说明
|
target 是表示目标、名称或处理指令的字符串。Data 是表示处理指令的值。一个新的处理指令被建立,但是并没有加到文件树中。要把处理指令加到文件树中,必须使用插入方法,例如:insertBefore、replaceChild,或是appendChild。
| |
使用范例
|
objNewPI = xmlDoc.createProcessingInstruction(‘XML’, ‘version="1.0"’);
alert(objNewPI.xml);
| |
createTextNode
|
方法说明
|
建立一个新的text 节点,并包含指定的数据。
|
基本语法
|
xmlDocument.createTextNode(data);
| |
语法说明
|
data 是一个代表新text 节点的字符串。一个新的text 节点被建立,但是没有加到文件树中。若要将节点加到文件树中,必须使用插入方法,例如:insertBefore,replaceChild或appendChild。
| |
使用范例
|
objNewTextNode = xmlDoc.createTextNode("This is a text node.");
alert(objNewTextNode.xml);
| |
getElementsByTagName
|
方法说明
|
传回指定名称的元素集合。
|
基本语法
|
objNodeList = xmlDocument. getElementsByTagName (tagname);
| |
语法说明
|
tagname 是一个字符串,代表找到的元素卷标名称。使用tagname "*"传回文件中所有找到的元素。
| |
使用范例
|
objNodeList = xmlDoc.getElementsByTagName("*");
alert(objNodeList.item(1).xml);
| |
hasChildNodes
|
方法说明
|
如果指定的节点有一个或更多子节点,传回值为true。
|
基本语法
|
boolValue = xmlDocumentNode.hasChildNodes() ;
| |
语法说明
|
如果此节点有子节点传回值为true,否则传回false 值。
| |
使用范例
|
boolValue = xmlDoc.documentElement.hasChildNodes();
alert(boolValue);
| |
insertBefore
|
方法说明
|
在指定的节点前插入一个子节点。
|
基本语法
|
objDocumentNode = xmlDocumentNode.insertBefore(newChild,refChild);
| |
语法说明
|
newChild 是一个包含新子节点地址的对象,refChild 是参照节点的地址。新子节点被插到参照节点之前。如果refChild 参数没有包含在内,新的子节点会被插到子节点列表的末端。
| |
使用范例
|
objRefNode = xmlDoc.documentElement;
alert(xmlDoc.xml);
objNewNode = xmlDoc.createComment("This is a comment");
xmlDoc.insertBefore(objNewNode, objRefNode);
alert(xmlDoc.xml);
| |
load
|
方法说明
|
表示从指定位置加载的文件。
|
基本语法
|
boolValue = xmlDocument.load(url);
| |
语法说明
|
url 包含要被加载档案的URL 的字符串。假如文件加载成功,传回值即为true。若加载失败,传回值为false。
| |
使用范例
|
boolValue = xmlDoc.load("LstA_1.xml");
alert(boolValue);
| |
loadXML
|
方法说明
|
加载一个XML 文件或字符串的片断。
|
基本语法
|
boolValue = xmlDocument.loadXML(xmlString);
| |
语法说明
|
xmlString 是包含XML 文字码的字符串。这个字符串可以包含整个文件或者只是一个文件片断。如果文件加载成功,传回值为true。假如加载失败,传回值则是false。
| |
使用范例
|
xmlString = "<GREETING> <MESSAGE> Hello! </MESSAGE> </GREETING>";
boolValue = xmlDoc.loadXML(xmlString);
alert(boolValue);
| |
nodeFromID
|
方法说明
|
传回节点ID 符合指定值的节点。
|
基本语法
|
xmlDocumentNode = xmlDocument.nodeFromID(idString);
| |
语法说明
|
idString 是一个包含ID 值的字符串。符合的节点必定是ID 型态。若符合,将传回一个对象;若操作失败,则传回null。
| |
使用范例
|
objDocumentNode = xmlDoc.nodeFromID("TO");
alert(objDocumentNode);
| |
parsed
|
方法说明
|
会验证该指定的节点(node)及其衍生的子节点(descendants)是否已被解析过。
|
基本语法
|
boolValue = xmlDocumentNode.parsed();
| |
语法说明
|
如果全部的节点都已经被解析过了,则传回值为ture;如果有任何一个节点尚未被解析,传回值则为false。
| |
使用范例
|
currNode = xmlDoc.documentElement.childNodes.item(0);
boolValue = currNode.parsed();
alert(boolValue);
| |
removeChild
|
方法说明
|
会将指定的节点从节点清单中移除。
|
基本语法
|
objDocumentNode = xmlDocumentNode.removeChild(oldChild);
| |
语法说明
|
oldChild 为一个包含要被移除的节点对象。
| |
使用范例
|
objRemoveNode = xmlDoc.documentElement.childNodes.item(3);
alert(xmlDoc.xml);
xmlDoc.documentElement.removeChild(objRemoveNode);
alert(xmlDoc.xml);
| |
replaceChild
|
方法说明
|
置换指定的旧子节点为提供的新子节点。
|
基本语法
|
objDocumentNode = xmlDocumentNode.replaceChild(newChild,oldChild);
| |
语法说明
|
newChild 为包含新子节点的对象。如果此参数为null,则此旧子节点会被移除而不会被取代。oldChild 为包含旧子节点的对象。
| |
使用范例
|
objOldNode = xmlDoc.documentElement.childNodes.item(3);
objNewNode = xmlDoc.createComment("I''ve replaced the BCC element.");
alert(xmlDoc.xml);
xmlDoc.documentElement.replaceChild(objNewNode,objOldNode);
alert(xmlDoc.xml);
| |
selectNodes
|
方法说明
|
传回所有符合提供样式(pattern)的节点。
|
基本语法
|
objDocumentNodeList = xmlDocumentNode.selectNodes(patternString);
| |
语法说明
|
patternString 为一包含XSL 样式的字符串。此方法会传回节点清单对象,包含符合样式的节点。如果没有符合的节点,则传回空的清单列表。
| |
使用范例
|
objNodeList=xmlDoc.selectNodes("/");
alert(objNodeList.item(0).xml);
| |
selectSingleNode
|
方法说明
|
传回第一个符合样式的节点。
|
基本语法
|
objDocumentNode = xmlDocumentNode. selectSingleNode (patternString);
| |
语法说明
|
patternString 为一包含XSL 样式的字符串。此方法会传回第一个符合的节点对象,如果没有符合的节点,则传回null。
| |
使用范例
|
objNode = xmlDoc.selectSingleNode("EMAIL/BCC");
alert(objNode.xml);
| |
transformNode
|
方法说明
|
使用提供的样式表来处理该节点及其子节点。
|
基本语法
|
strTransformedDocument = xmlDocumentNode.transformNode(stylesheet);
| |
语法说明
|
stylesheet 为一XML 文件或是片断包含负责节点转换工作的XSL 元素。此方法会传回一包含转换结果的字符串。
| |
使用范例
|
var style = new ActiveXObject("Microsoft.XMLDOM");
style.load("LstA_49.xsl");
strTransform = xmlDoc.transformNode(style.documentElement);
alert(strTransform);
| |
Document 事件
| ||
ondataavailable
|
事件说明
|
该事件会在XML 文件有效时被触发。
|
基本语法
|
该事件有下面三种处理方式
.Inline:<element ondataavailable = handler>;
.Event property:object.ondataavailable = handler;
.Named script:<SCRIPT FOR = object EVENT = ondataavailable>;
| |
语法说明
|
ondataavailable 事件只要一获得有效的数据就会被触发。这项技术并未说明在这个文件中有多少数据是有效的。
| |
使用范例
|
xmlDoc.ondataavailable = alert("Data is now available.");
| |
onreadystatechange
|
事件说明
|
这个事件会在readyState 属性内容改变时被触发。
|
基本语法
|
此一事件有如下三种处理方式(与ondataavailable相似):
. Inline:<element onreadystatechange = handler>; . Event property:object.onreadystatechange = handler; . Named script:<SCRIPT FOR = object EVENT = onreadystatechange>; | |
语法说明
|
onreadystatechange 事件在readyState 属性内容改变时就会被触发,但这个事件并未说明「准备好」的状态是什么。必须使用readyState 属性来取得现在的状态。
| |
使用范例
|
xmlDoc.onreadystatechange =
alert("The readyState property is" + xmlDoc.readyState); | |
nodeList 对象的属性
| ||
length
|
属性说明
|
length 属性是nodeList 对象的唯一属性
|
基本语法
|
传回集合中项目的个数。
| |
语法说明
|
intValue = xmlNodeList.length;
| |
使用范例
|
objNodeList = xmlDoc.documentElement.childNodes;
alert(objNodeList.length);
| |
nodeList 对象的方法
| ||
item
|
方法说明
|
存取文件树中的单一节点。
|
基本语法
|
objDocumentNode = xmlNodeList.item(index);
| |
语法说明
|
index 为长整数指定子节点的index(0-based)。
| |
使用范例
|
objNode = xmlDoc.documentElement.childNodes.item(2);
alert(objNode.xml);
| |
nextNode
|
方法说明
|
存取集合中的下一个节点。
|
基本语法
|
objDocumentNode = xmlNodeList.nextNode();
| |
语法说明
|
传回包含下一个节点的对象。若无法取得下一个节点则传回null。
| |
使用范例
|
objNode = xmlDoc.documentElement.childNodes;
objNextNode = objNode.nextNode();
alert(objNextNode.xml);
objNextNode = objNode.nextNode();
alert(objNextNode.xml);
| |
reset
|
方法说明
|
重新设定节点清单列表中的索引(index)指针。
|
基本语法
|
objDocumentNode = xmlNodeList.reset();
| |
语法说明
|
设定节点清单列表中的指针指向第一个节点的前面。
| |
使用范例
|
objNode = xmlDoc.documentElement.childNodes;
objNextNode = objNode.nextNode();
alert(objNextNode.xml);
objNode.reset();
objNextNode = objNode.nextNode();
alert(objNextNode.xml);
| |
parseError 对象的属性
| ||
parseError 对象传回最后一个解析错误的信息。
| ||
要示范parseError 对象如何运作,需要使用一份有错误的XML 文件,下面是一份保有Cc、Bcc 元素的电子邮件文件,根据DTD 这是一篇错误的电子邮件文件。
<?xml version="1.0"?>
<!DOCTYPE EMAIL SYSTEM "LstA_2.dtd">
<EMAIL PRIORITY="HIGH">
<TO>Jodie@msn.com</TO>
<FROM>Bill@msn.com</FROM>
<BCC>Naomi@msn.com</BCC>
<CC>Philip@msn.com</CC>
<SUBJECT>My document is a tree.</SUBJECT>
<BODY>This is an example of a tree structure.</BODY>
</EMAIL>
| ||
errorCode
|
属性说明
|
传回最后一个解析错误的错误码。
|
基本语法
|
intErrorValue = xmlDocument.parseError.errorCode;
| |
语法说明
|
此属性只读且会传回一长整数。
| |
使用范例
|
intParseValue = xmlDoc.parseError.errorCode;
alert(intParseValue);
| |
filePos
|
属性说明
|
传回档案中错误发生的位置。
|
基本语法
|
intErrorValue = xmlDocument.parseError.filePos;
| |
语法说明
|
此一属性只读,且会传回表示绝对位置的长整数(以字符数表示)。
| |
使用范例
|
intParseValue = xmlDoc.parseError.filePos;
alert(intParseValue);
| |
Line
|
属性说明
|
传回错误发生所在的行数。
|
基本语法
|
intErrorValue = xmlDocument.parseError.line;
| |
语法说明
|
此一属性只读,且会传回表示错误发生所在行数的长整数。
| |
使用范例
|
intParseValue = xmlDoc.parseError.line;
alert(intParseValue);
| |
linePos
|
属性说明
|
传回错误发生在行中的哪个位置。
|
基本语法
|
intErrorValue = xmlDocument.parseError.linePos;
| |
语法说明
|
此一属性只读,且会传回一长整数表示错误发生在行中的哪一个字符位置。
| |
使用范例
|
intParseValue = xmlDoc.parseError.linePos;
alert(intParseValue);
| |
reason
|
属性说明
|
传回最后一个错误发生的原因。
|
基本语法
|
strErrorReason = xmlDocument.parseError.reason;
| |
语法说明
|
此一属性只读,且会传回最后一个解析错误发生原因的叙述字符串。
| |
使用范例
|
strErrorReason = xmlDoc.parseError.reason;
alert(strErrorReason);
| |
srcText
|
属性说明
|
传回错误发生处该行的文字。
|
基本语法
|
strSrcText = xmlDocument.parseError.srcText;
| |
语法说明
|
此一属性只读。传回错误发生处该行完整的文字,而且包含空格。
| |
使用范例
|
strSrcText = xmlDoc.parseError.srcText;
alert(strSrcText);
|
以上内容仅供参考。