Version3.0第四章文档对象模型DOM2内容回顾什么是样式表引用CSS显示XMLXSL的解析过程XSL的结构、语法3本章目标理解DOM模型解析XML文档,生成文档对象操纵DOM模型的对象、接口、属性、方法4文档对象模型DOM概述什么是文档对象模型DOM与平台无关文档模型类型–线性模型–树型模型–对象模型5DOM模型结构?xmlversion=1.0encoding=gb2312?booksbookauthor至尊宝/authortitle倘若时光倒流/title/bookbookauthor白晶晶/authortitle月光宝盒实用大全/title/book/books6DOM模型结构(续)文本authorbooksbookbookauthortitletitle至尊宝倘若时光倒流白晶晶月光宝盒实用大全文档(根节点)根元素节点元素7DOM模型结构(续)最常见的节点类型:–元素:元素是XML的基本构件。典型地,元素可以有其它元素、文本节点或两者兼有来作为其子节点。元素节点还是可以有属性的唯一类型的节点。–属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点–文本:确切来讲,文本节点是:文本。它可以包含许多信息或仅仅是空白。–文档(根节点):文档节点是整个文档中所有其它节点的父节点。(根节点不等于根元素节点!)较不常见的节点类型:CDATA、注释、处理指令8MSXML解析XML文档的过程9DOM路线图MSXML解析器XML文档analyzeDOMDOCUMENT节点元素、文本、属性或其它节点类型命名空间对象方法DOMAPIcreatethatismadeupofcanbethatarepartofanyofthedefinedandcanbeactedonbyanyofthedefinedthatarepartofthe10生成DOM文档对象的方法varxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);生成XML文档对象xmlDoc,xmlDoc中包含XML文档中所有元素和节点装载XML文档完毕后才开始处理下一步骤将XML文档装载到文档对象中,在内存中形成文档对象树11DOM对象IXMLDOMDocument/DOMDocumentIXMLDOMNodeIXMLDOMNodeListIXMLDOMParseErrorIXMLDOMAttributeIXMLDOMDocumentType12IXMLDOMDocument/DOMDocument表示DOM树的最顶层节点属性–async--是否可以异步下载(可读写属性)–attributes--返回节点的属性列表–baseName--返回节点的标记名称–childNodes--子节点列表–documentElement--返回文档的根元素(可读写属性)方法–appendChild(在当前节点的最后增加一个新的子节点)–createNode(根据条件生成一个新节点)createnode(type,name,namespaceURL)1--元素节点;2--属性节点;3--文本节点。。。13IXMLDOMDocument/DOMDocument示例1varoNodeMap,str,oList,item;varxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);if(xmlDoc.parseError!=0)document.writeln(xmlDoc.parseError.reason+br);else{oNodeMap=xmlDoc.documentElement.attributes;document.write(oNodeMap.length+br);str=xmlDoc.documentElement.childNodes[1].baseName;document.write(str+br);oList=xmlDoc.documentElement.childNodes;for(vari=0;ioList.length;i++)document.write(oList[i].xml+br);}chap04/domdocument1.htm14IXMLDOMDocument/DOMDocument示例2scriptlanguage=javascriptvarxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);varroot=xmlDoc.documentElement;document.write(root.xml);document.write(br--------------------------br);varnode=xmlDoc.createNode(1,创建节点,);node.text=这是新创建得节点;root.appendChild(node);window.alert(root.xml);document.write(root.xml);/scriptcreatenode/appendchild示例(domdocument2.htm)15IXMLDOMNode属性–lastChild--返回最后一个子节点–nextSibling--指向同一层的下一个兄弟节点–xml--用XML格式表现该节点和所有子节点的内容方法–selectNode--根据匹配模式操作来返回符合要求的节点集合–selectSingleNode--根据匹配模式操作来返回符合要求的第一个节点IXMLDOMNode是DOM的基本对象,所有节点都可以看作是一个IXMLDOMNode对象,所有其它DOM对象接口都是继承它的属性和方法。16IXMLDOMNode示例1htmlbodyscriptlanguage=javascriptvarxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);varroot=xmlDoc.documentElement;varnode=root.lastChild;window.alert(node.xml);varfirstNode=root.childNodes[0];varnextNode=firstNode.nextSibling;window.alert(nextNode.xml);/script/body/htmlIXMLDOMNode示例程序17IXMLDOMNode示例2htmlbodyscriptlanguage=javascriptvarxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);varroot=xmlDoc.documentElement;varnode=root.selectNodes(PERSON/NAME);window.alert(node.length);/script/body/htmlIXMLDOMNode示例218IXMLDOMNodeList属性length--接口对象中包含的节点数量。方法nextNode--返回节点集合中下一个节点。节点的集合19IXMLDOMParseError属性line--错误所在行号linepos--错误在行中的位置reason--发生错误的原因srcText--错误行文本用此接口捕获XML文档中存在的错误(包括XML结构完整错误及有效性错误)20IXMLDOMParseError示例htmlbodyscriptlanguage=javascriptvarxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(errorxml.xml);if(xmlDoc.parseError.errorCode!=0){document.writeln(错误所在的行号:+xmlDoc.parseError.line+br);document.writeln(错误所在的列号:+xmlDoc.parseError.linepos+br);document.writeln(错误原因:+xmlDoc.parseError.reason+br);document.writeln(错误行文本:+xmlDoc.parseError.srcText+br);}/script/body/htmlchap04\errorxml.xmlIXMLDOMParseError示例21IXMLDOMAttribute表示元素的相关属性属性nodeType--返回节点类型ownerDocument--返回该节点的根节点text--返回节点的文本和子节点树value--返回属性的值xml--返回当前节点及其所有子节点的内容方法appendChildselectSingleNode22IDOMAttribute示例htmlbodyscriptlanguage=javascriptvarxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);varnode=xmlDoc.documentElement.childNodes[0];document.write(节点类型:+node.nodeType+br);document.write(根元素节点名称:+node.ownerDocument.documentElement.tagName+br);document.write(当前节点的属性值:+node.attributes[0].value+br);document.write(当前节点及其子节点所包含的文本:+node.text+br);/script/body/htmlIDOMAttribute示例23IXMLDOMDocumentType属性–entities--返回实体集,包括内部和外部DTD定义的–name--返回文档类型的名字–nodeTypeString--返回节点类型的字符串表示方法–removeChild--从返回的子节点集中删除特定子节点,并返回它–replaceChild--从返回的子节点集中用新节点替换特定老节点24IXMLDOMDocumentType示例htmlbodyscriptlanguage=javascriptvarxmlDoc=newActiveXObject(Msxml2.DOMDocument.4.0);xmlDoc.async=false;xmlDoc.load(candidate.xml);varroot=xmlDoc.documentElement;varnode=root.childNodes[1];window.alert(当前节点的类型为:+node.childNodes[0].nodeTypeString);varelement=xmlDoc.createElem