第5章XML文档对象模型

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2019/12/191第5章XML文档对象模型理解文档对象模型的概念熟悉文档对象模型的基本知识掌握客户端加载XML的方法掌握服务器端加载XML的方法学会用DOM编制JavaScript程序2019/12/1921DOM的基本概念DOM(DocumentObjectModel,文档对象模型)定义了访问诸如XML和XHTML文档的标准,是W3C(万维网联盟)推荐的标准。DOM是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的与平台和语言中立的接口。它定义了所有文档元素的对象和属性,以及访问它们的方法。DOM由三部分组成:核心DOM:用于任何结构化文档的标准模型HTMLDOM:用于HTML文档的标准模型XMLDOM:用于XML文档的标准模型HTMLDOM:定义了所有HTML元素的对象和属性,以及访问它们的方法XMLDOM:定义了所有XML元素的对象和属性,以及访问它们的方法。2019/12/1932XMLDOM节点在XMLDOM中XML文档的每个成分都是一个节点:整个文档是一个文档节点每个XML标签是一个元素节点包含在XML元素中的文本是文本节点每一个XML属性是一个属性节点注释属于注释节点特别注意:元素节点不包含文本,元素节点的文本是存储在文本节点中的。2019/12/194?xmlversion=1.0encoding=ISO-8859-1?bookstorebookcategory=CHILDRENtitlelang=enHarryPotter/titleauthorJK.Rowling/authoryear2005/yearprice29.99/price/bookbookcategory=COOKINGtitlelang=enEverydayItalian/titleauthorGiadaDeLaurentiis/authoryear2005/yearprice30.00/price/bookbookcategory=WEBtitlelang=enXQueryKickStart/titleauthorJamesMcGovern/authorauthorPerBothner/authorauthorKurtCagle/authorauthorJamesLinn/authorauthorVaidyanathanNagarajan/authoryear2003/yearprice49.99/price/book/bookstore◆根节点bookstore拥有四个book子节点。◆第一个book节点拥有四个子节点:titleauthoryearprice◆上面每个节点都包含一个文本节点HarryPotterJK.Rowling“2005”29.99“◆注意:元素节点year,拥有一个值为“2005”的文本节点。2005不是year元素的值!2019/12/1953XMLDOM节点树XMLDOM把XML文档视为一棵节点树。可通过这棵树访问所有节点,修改、删除、创建节点。树中的所有节点彼此之间都有关系。2019/12/1963.1XMLDOM节点间的关系父、子和同胞节点用于描述节点间关系在节点树中,顶端的节点成为根节点根节点之外的每个节点都有一个父节点节点可以有任何数量的子节点叶子是没有子节点的节点同胞节点是拥有相同的父节点2019/12/1974XMLDOM解析大多数浏览器都内建了供读取和操作XML的XML解析器。解析器把XML读入内存,并把它转换为可被脚本语言访问的XMLDOM对象。所有的解析器都含有遍历XML树、访问、插入及删除节点的函数。2019/12/1984.1解析器加载XML文档在访问、处理XML文档之前,必须把它载入XMLDOM对象。根据浏览器的不同,加载的方法也稍有不同。//在IE(IE5及更高版本)中创建空的XML文档对象varxmlDoc=newActiveXObject(Microsoft.XMLDOM);//关闭异步加载,确保在文档完整加载之前,解析器不会继续执行脚本xmlDoc.async=false;//加载名为books.xml的文档xmlDoc.load(books.xml);//在Fireforx,Mozilla,Opera中创建空的XML文档对象varxmlDoc=document.implementation.createDocument(,,null);//关闭异步加载,确保在文档完整加载之前,解析器不会继续执行脚本xmlDoc.async=false;//加载名为books.xml的文档xmlDoc.load(books.xml);2019/12/199DomImplementation对象该对象可执行与文档对象模型的任何与实例无关的操作。可以通过Document对象的implementation属性获得对DomImplementation对象的引用。在Firefox,Mozilla,Opera等浏览器中用该对象的createDocument()方法创建一个新XMLDOM对象。语法:createDocument(namespaceURI,qualifiedName,doctype)namespaceURI:指定根元素的名称空间。qualifiedName:指定名称空间前缀。Doctype:创建XMLDOM对象的DTD对象。2019/12/19104.2通用XML文档加载函数functionloadXMLDoc(dname){varxmlDoc=null;try{//InternetExplorerxmlDoc=newActiveXObject(Microsoft.XMLDOM)}catch(e){try{//Firefox,Mozilla,Opera,etc.xmlDoc=document.implementation.createDocument(,,null)}catch(e){alert(e.message)}}try{xmlDoc.async=false;xmlDoc.load(dname);return(xmlDoc);}catch(e){alert(e.message)}return(xmlDoc);}为了避免重复编写代码,可以编写一个跨浏览器的通用的XML文档加载函数备用:2019/12/19114.3获取解析器错误信息在打开一个XML文档时,可能会发生解析器错误。通过parseError对象,可取回错误代码、错误原因和引起错误的行等等。parseError对象的主要属性:errorCode:返回一个长整型错误码,0表示无错。reason:返回包含错误原因的字符串。line:返回表示错误行号的长整型数。2019/12/1912获取错误信息的例子xmlDom=loadXMLDoc(error.xml);if(xmlDom.parseError.errorCode!=0){document.write(br错误代码:);document.write(xmlDom.parseError.errorCode);document.write(br错误原因:);document.write(xmlDom.parseError.reason);document.write(br错误行号:);document.write(xmlDom.parseError.line)}2019/12/19135XMLDOM对象的属性和方法属性和方法为XMLDOM定义了编程的接口。XMLDOM的documentElement属性是根节点。XMLDOM节点的主要属性(x为任意的节点对象):x.nodeName:x的名称;x.nodeValue:x的值;x.parentNode:x的父节点;x.childNodes:x的子节点列表;x.attributes:x的属性节点列表;XMLDOM节点的主要方法:x.getElementsByTagName(name):获取以x为根的子树中带有指定标签名称的所有元素,返回值为节点列表;x.appendChild(node):向x插入子节点;x.removeChild(node):从x删除子节点;2019/12/1914getElementsByTagName()返回拥有指定标签名的所有元素的列表(可以看成数组)。语法:node.getElementsByTagName(tagname);例:x.getElementsByTagName(title);仅返回x节点下的所有title元素。例:xmlDoc.getElementsByTagName(title);返回XML文档中的所有title元素的列表。5.1GetElementsByTagName2019/12/19155.2节点列表对象NodeList当使用getElementsByTagName()方法时,会返回NodeList对象。NodeList对象表示节点的列表,以XML中的相同顺序排列。使用从0开始的下标来访问节点列表中的节点。xmlDoc=loadXMLDoc(books.xml);x=xmlDoc.getElementsByTagName(title);txt=x[0].childNodes[0].nodeValue;2019/12/19165.3NodeList的length属性NodeList对象会保持自身的更新。如果删除或添加了元素,列表会自动更新调整。节点列表的length属性是列表中节点的数目。下例是使用length属性来遍历title元素的列表:xmlDoc=loadXMLDoc(books.xml);//变量x存放节点列表x=xmlDoc.getElementsByTagName('title');for(i=0;ix.length;i++){document.write(x[i].childNodes[0].nodeValue);document.write(br/);}2019/12/19175.4XMLDOM的根节点documentElementXML文档对象的documentElement属性是根节点。遍历根节点的子节点的代码如下:xmlDoc=loadXMLDoc(books.xml);x=xmlDoc.documentElement.childNodes;//输出每子节点的名称for(i=0;ix.length;i++){document.write(x[i].nodeName);document.write(br/);}2019/12/19186XMLDOM节点信息节点属性:nodeName、nodeValue以及nodeTypenodeName属性nodeName属性规定节点的名称。nodeName是只读的元素节点的nodeName与标签名相同属性节点的nodeName是属性的名称文本节点的nodeName永远是#text文档节点的nodeName永远是#document2019/12/19196.1nodeValue属性nodeValue属性nodeValue属性规定节点的值。元素节点的nodeValue是undefined文本节点的nodeValue是文本自身属性节点的nodeValue是属性的值获取元素的值x=xmlDoc.getElementsByTagName(title)[0].childNodes[0];txt=x.nodeValue;更改元素的值x=xmlDoc.getElementsByTagName(title)[0].ch

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功