《XML数据接口DOM》PPT课件.ppt

上传人:za****8 文档编号:13190848 上传时间:2020-06-07 格式:PPT 页数:54 大小:231.01KB
返回 下载 相关 举报
《XML数据接口DOM》PPT课件.ppt_第1页
第1页 / 共54页
《XML数据接口DOM》PPT课件.ppt_第2页
第2页 / 共54页
《XML数据接口DOM》PPT课件.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
第八章XML数据接口DOM,XMLDOM简介,XML文档对象模型(XMLDocumentObjectModel)定义了一种访问和处理XML文档的标准方法。什么是XMLDOM?XMLDOM是针对XML的文档对象模型(DocumentObjectModel)XMLDOM独立于平台和语言XMLDOM定义了一套标准的用于XML的对象XMLDOM定义一种标准的访问XML文档的方法XMLDOM定义了一种标准的处理XML文档的方法XMLDOM是一个W3C标准,XMLDOM节点,节点根据DOM,XML文档中的每各成分都是一个节点。DOM是这样规定的:整个文档是一个文档节点每个XML标签是一个元素节点包含在XML元素中的文本是文本节点每一个XML属性是一个属性节点注释属于注释节点,XMLDOM节点,Node层次节点彼此都有等级关系。XML文档中的所有节点组成了一个文档树(或节点树)。XML文档中的每个元素、属性、文本等都代表着树中的一个节点。树起始于文档节点,并由此继续伸出枝条,直到处于这棵树最低级别的所有文本节点为止。术语“父”和“子”被用来描述节点间的关系。某些节点拥有子节点,而另一些节点没有子节点(或称叶节点)。由于XML数据被组织在树结构中,所以可在不确定树的具体结构以及其中所包含的数据类型的情况下,对XML数据进行遍历。,XMLDOM节点,DOM节点层次范例此XML文档中的根元素被命名为。所有此文档中的其余的元素都被包含在内部。元素代表DOM树的根节点。节点拥有四个子节点。第一个子节点也含有四个子节点:、以及,它们各自只包含着文本,EverydayItalian、GiadaDeLaurentiis、2005以及30.00。,这幅图展示了来自上面这个XML文档的DOM节点树的一个片段:,XMLDOM节点树,一个节点树中的所有节点彼此都是有关系的。什么是节点树?一个节点树可以把一个XML文档展示为一个节点集,以及它们之间的连接。在一个节点树中,最顶端的节点被称为根每一个节点,除根之外,都拥有父节点一个节点可以有无限的子叶是无子的节点同级节点指拥有相同的父的节点,XMLDOM节点树,这幅图向我们展示了节点树的一个部分,以及上面这个XML文件中节点间的关系。,XMLDOM访问节点,查找并访问节点你可通过若干种方法来查找您希望操作的元素:通过使用getElementsByTagName()方法通过使用一个元素节点的parentNode、firstChild以及lastChild属性,XMLDOM访问节点,getElementsByTagName()getElementsByTagName()方法可在整个文档中查找任何XML元素。此方法会忽略文档的结构。假如你文档中所有元素,getElementsByTagName()方法会全部找出它们,不管这些元素位于哪个级别。就是说,这个方法会给您任何您所需要的XML元素,不论它们所处的位置!getElementsByTagName()方法会使用指定的标签名返回所有的元素(作为一个节点列表),这些元素是在使用此方法时所处的元素的后代。,XMLDOM访问节点,getElementsByTagName()语法getElementsByTagName(tagname);例子下面这个例子会返回文档中所有元素的一个节点列表:xmlDoc.getElementsByTagName(book);,XMLDOM访问节点,点列表当使用某个节点列表时,我们通常会把此列表存储在一个变量中,就像这样:varx=xmlDoc.getElementsByTagName(book);现在,变量x包含着页面中所有元素的一个列表,并且我们可通过它们的索引号来访问这些元素。注释:索引起始于0。您可以通过使用length属性来循环遍历节点列表:varx=xmlDoc.getElementsByTagName(book);for(vari=0;ielement您也可以通过使用索引号来访问某个具体的元素。要访问第三个元素,您可以这样写:vary=x2;,XMLDOM访问节点,parentNode、firstChild以及lastChild属性parentNode、firstChild以及lastChild会遵循文档的结构,可在文档中继续进行短距离的旅行。请看下面的XML片段:EverydayItalianGiadaDeLaurentiis200530.00在上面的XML代码中,元素是元素的首个子元素(firstChild),元素是元素的最后一个子元素(lastChild)。同时,元素是、以及元素的父节点(parentNode),XMLDOM访问节点,根节点有一个特殊的文档属性可用来访问这些标签:document.documentElement,XMLDOM节点信息,节点信息每个节点都拥有包含着关于节点某些信息的属性。这些属性是:nodeName(节点名称)nodeValue(节点值)nodeType(节点类型),XMLDOM节点信息,nodeNamenodeName属性含有节点的名称。元素节点的nodeName是标签名称属性节点的nodeName是属性名称文本节点的nodeName永远是#text文档节点的nodeName永远是#document注释:nodeName所包含的XML元素的标签名称永远是大写的。nodeValue对于文本节点,nodeValue属性包含文本。对于属性节点,nodeValue属性包含属性值。nodeValue属性对于文档节点和元素节点是不可用的。,XMLDOM节点信息,nodeTypenodeType属性可返回节点的类型。最重要的节点类型是:元素类型节点类型元素1属性2文本3注释8文档9,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),DOMNodeList当我们使用类似childNodes或getElementsByTagName()之类的属性或方法时,就会收到一个NodeList对象。NodeList对象代表一个有序的节点列表。可通过它们的索引号码(由0起始)来访问节点列表中的这些节点。注释:在一个节点列表中,其中的节点是按照它们在XML中被规定的顺序来返回的。,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),下面这个XML文件:books.xml现在,通过使用方法getElementsByTagName(title),来创建一个books.xml中所有元素的节点列表。下面这幅图表示所返回的节点列表:,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),下面这个代码片段可从第一个元素中取得文本:getElementsByTagName(title)0.childNodes0.nodeValue输出:EverydayItalian,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),取得节点列表的长度节点列表可保持其自身的更新。如果某个元素被删除或添加,那么列表会自动更新。节点列表有一个很有用的属性:length。length属性可返回某个节点列表中的节点数目。下面的代码片段可取得books.xml中元素的数目:getElementsByTagName(title).length输出:4,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),当您了解到某个节点列表的长度后,就可以轻易地循环遍历这个列表,并提取您需要的值。下面的代码片段循环遍历所有的元素,并输出它们的值:/thexvariablewillholdaNodeListvarx=getElementsByTagName(title)for(i=0;i)输出:EverydayItalianHarryPotterXQueryKickStartLearningXML,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),DOMNamedNodeMap当我们对某个元素使用attributes属性时,就会收到一个NamedNodeMap对象。一个NamedNodeMap代表了属性节点的一个无序列表。可通过节点名称访问NamedNodeMap中的节点。注释:在一个NamedNodeMap中,节点不会以任何特别的顺序返回。,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),取得NamedNodeMap的长度NamedNodeMap会保持自身的更新。如果某个元素被删除或添加,此列表也会被自动更新。NamedNodeMap也拥有length属性。length属性可返回列表中的节点数目。请看下面这个XML文件:books.xml下面的这个代码片段可取得books.xml中第一个元素的属性数目:getElementsByTagName(title)0.attributes.length输出:1,XMLDOM节点列表(NodeList)和指定节点地图(NamedNodeMap),取得NamedNodeMap中某个项目的值NamedNodeMap对象的getNamedItem()方法可被用来取回某个指定的节点。下面的代码片段向我们展示了如何输出每个元素中category属性的值:xmlDoc=loadXMLDoc(books.xml);varx=xmlDoc.getElementsByTagName(book);for(i=0;i)输出:COOKINGCHILDRENWEBWEB,解析XMLDOM,如需读取、更新、创建或者操作某个XML文档,则需要XML解析器。解析一个XML文档如需操作某个XML文档,您需要XML解析器。解析器会将文档载入电脑的内存中。一旦文档被载入,可使用DOM对其数据进行操作。DOM把XML作为一颗树来处理。微软的XML解析器微软的XML解析器是存在于IE5.0或更高版本中的COM组件。一旦你安装了IE,就可使用脚本来利用解析器了。微软的XML解析器支持所有必要的功能,来遍历节点树,访问节点以及它们的属性值,插入并删除节点,并将节点数转换回XML。,解析XMLDOM,如需创建微软XML解析器的一个实例,请使用下面的代码:JavaScript:varxmlDoc=newActiveXObject(Microsoft.XMLDOM);VBScript:setxmlDoc=CreateObject(Microsoft.XMLDOM)ASP:setxmlDoc=Server.CreateObject(Microsoft.XMLDOM),解析XMLDOM,下面的代码段可向微软的XML解析器载入一个已有的XML文档(note.xml):varxmlDoc=newActiveXObject(Microsoft.XMLDOM);xmlDoc.async=false;xmlDoc.load(note.xml);上面的脚本的第一行创建了XML解析器的一个实例。第二行关闭了同步载入,这样可以确保在文档被完全载入前解析器不会继续执行。第三行会告知解析器载入名为note.xml的XML的文档。例8.1,8.2,XMLDOM遍历节点树,遍历节点树您常常会需要循环遍历XML文档中的元素。下面的例子可循环遍历的所有子元素,并输出每个节点的节点名以及节点值:例8.3,XMLDOM节点导航,DOM节点导航我们可以通过使用节点彼此间的关系在节点间进行导航:parentNodechildNodesfirstChildlastChildnextSiblingpreviousSibling,XMLDOM节点导航,下面这幅图展示了节点树的一个部分,以及上面这个XML文件中节点间的关系:,XMLDOM节点导航,取得节点的首个子元素下面的代码片段可取得的首个子节点:/检测首个子节点是否是元素节点functionget_firstchild(n)varx=n.firstChild;while(x.nodeType!=1)x=x.nextSibling;returnx;xmlDoc=load(books.xml);vary=get_firstchild(xmlDoc.documentElement);document.write(y.nodeName);以上代码的输出:book,这个例子中的函数可检测第一个子节点的节点类型。元素节点的节点类型是1,因此如果首个子节点不是元素节点,它就会移至下一节点并检查此节点是否是元素节点。这个过程会持续到首个元素被找到为止。,XMLDOM节点导航,取得节点的前一个同级节点下面这个代码片段会取得第一个元素的前一个同级节点:/checkiftheprevioussiblingnodeisanelementnodefunctionget_previoussibling(n)varx=n.previousSibling;while(x.nodeType!=1)x=x.previousSibling;returnx;xmlDoc=load(books.xml);varx=xmlDoc.getElementsByTagName(author)0;vary=get_previoussibling(x);document.write(y.nodeName);以上代码的输出:title,这个例子中的函数可检测前一个同级节点的节点类型。假如前一个同级节点不是一个元素节点,它就会移至下一个前面的同级节点,并检查此节点是否是元素节点。这个过程会持续到前一个同级的元素节点被找到为止。,XMLDOM取得节点,取得某个元素的值getElementsByTagname()方法可返回一个节点列表,其中包含着所有通过指定标签名找到的元素,这些元素的排列顺序与它们在源文档中出现的顺序相同。例8.4使用getElementsByTagname()方法来取得books.xml中所有title元素的值。,XMLDOM取得节点,取得某个属性的值getAttribute()方法可被用来显示某个属性的值。例8.5使用getAttribute()方法来取得“books.xml”中所有“category”属性的值。取得某个项目的值getNamedItem()方法可被用来找回某个指定的节点。例8.6用getNamedItem()方法来取得books.xml中所有category属性的值。,XMLDOM设置节点,设置一个新的属性以及属性值setAttribute()方法可被用来改变现有属性的值,或者为某个元素创新一个新的属性/属性值。例8.7使用setAttribute()来设置新的属性/属性值。另一种创建新属性的方法createAttribute()可被用来创建一种新的属性节点。例8.8使用createAttribute()来创建一个新的属性节点,并使用setAttributeNode()将此节点插入一个元素中。,XMLDOM设置节点,改变一个属性值setAttribute()方法可被用来改变某个现有属性的值,或者为一个元素创建一个新的属性/属性值。例8.9使用setAttribute()方法来改变现有属性的值。改变一个项目的值getNamedItem()方法可被用来改变某个现有项目的值。例8.10使用getNamedItem()方法来改变现有属性的值。,XMLDOM删除节点,删除某个元素removeChild()可被用来删除某个指定的节点。例8.11使用removeChild()从载入的XML中删除最后一个元素。从元素删除文本deleteData()方法被用来从文本节点删除数据。deleteData()方法有两个参数:offset-从何处开始删除字符。偏移量的起始值是0count-删除多少字符例8.12使用deleteData()从已载入的XML中的一个文本节点删除文本。,XMLDOM删除节点,删除属性removeAttribute()方法被用来删除属性节点。根据属性名。例8.13使用removeAttribute()从已载入的XML中删除所有的“category”属性。removeAttributeNode()removeAttributeNode()方法被用来删除某个属性节点。根据对象。例8.14使用removeAttributeNode()从已载入的XML中删除所有的category属性。,XMLDOM替换节点,替换节点列表中的某个节点replaceChild()方法被用来替换节点列表中的某个节点。例8.15使用replaceChild()来替换节点列表中的最后一个子节点。替换文本节点中的数据replaceData()方法被用来替换文本节点中的数据。replaceData()方法有三个参数:offset-从何处开始替换字符。偏移量的起始值为0length-替换多少字符string-要插入的字符串例8.16使用replaceData()来替换文本节点中的数据。,XMLDOM创建节点,创建一个元素createElement()方法可创建一个新的元素节点。例8.17使用createElement()来创建一个新的元素节点,并使用appendChild()将此节点添加到一个节点列表中。创建一个属性createAttribute()可创建一个新的属性节点。例8.18使用createAttribute()来创建一个新的属性节点,并使用setAttributeNode()将此节点插入一个元素中。,XMLDOM创建节点,创建一个文本节点createTextNode()方法可创建一个新的文本节点。例8.19使用createTextNode()来创建一个文本节点,并使用appendChild()将此节点添加到一个节点列表中。创建一个CDATASection节点createCDATASection()方法可创建一个新的CDATASection节点。例8.20使用createCDATAsection()来创建一个CDATAsection节点,并使用appendChild()将此节点添加到一个节点列表中。,XMLDOM创建节点,创建一个注释节点createComment()方法可创建一个新的注释节点。例8.21使用createComment()来创建一个注释节点,并使用appendChild()将此节点添加到一个节点列表中。,XMLDOM添加节点,向一个节点列表的末尾添加一个节点appendChild()方法可用来在某个特定的节点之后添加一个节点。此方法在被添加节点的位置不很重要的情况下是很有用的。例8.22使用createElement()来创建一个新的元素,并使用appendChild()将此节点添加到一个节点列表。在某个特定的节点之前插入节点insertBefore()可用来在某个特定的节点之前插入一个节点。此方法在被添加节点的位置很重要的情况下是很有用的。例8.23使用createElement()来创建一个新的元素,并使用insertBefore()将此节点插入到特定的节点之前。,XMLDOM添加节点,设置新的属性和属性值setAttribute()方法可被用来改变已有属性的值,或者为某个元素创建新的属性/属性值。注释:假如“edition”属性已存在,setAttribute()方法将重写此属性的值。例8.24使用setAttribute()方法来设置新的属性/属性值。向某个文本节点插入数据insertData()方法可用来向某个文本节点插入数据。insertData()方法有两个参数:offset-从何处开始插入字符。偏移量的起始值是0string-要插入的字符串例8.25使用insertData()向一个文本节点插入数据。,DOM克隆节点,复制节点cloneNode()方法可创建一个指定节点的备份。cloneNode()方法有一个参数(true或false)。此参数可指示被克隆节点是否应包括原节点的所有属性和子节点。例8.26使用cloneNode()来复制节点,并把它添加到一个节点列表。,使用JavaScript验证XML文档,在载入及验证XML数据的过程中,可能会由于不同的原因而抛出错误。例如:外部的XML文件找不到,或者XML的格式不正确,验证出错等。为了处理这些情况,MSXML提供了一个包含错误信息的对象parseError对象。用户可以通过parseError对象提供的与整数0进行比较的errorCode属性来检查错误。最有当errorCode为0时才表示没有错误发生。例:varsXml=“JeremyMcPeak”;varoXmlDom=newActiveXObject(“Msxml2.DOMDocument.4.0”);oXmlDom.load(sXml);if(oXmlDom.parseError.errorCode!=0)alert(“AnErrorOccurred:“+oXmlDom.parseError.reason);else/当载入XML数据成功后,使用JavaScript验证XML文档,parseError对象提供了一下属性,能够帮助人们更好的理解错误:errorCode:错误代码(长整型);filePos:在文件中发生错误的位置(长整型);line:包含错误的代码行的行号(长整型);position:在特定行中发生错误的位置(长整型);reason:错误的原因(字符串型);srcText:发生错误的代码行内容(字符串型);url:XML文档的URL(字符串型)。,使用DOM验证XML文档对于DTD的有效性,人们可以使用XMLDOM对象中的DOMDocument对象和IXMLDOMParseError对象来验证XML文档对于DTD内容的有效性。例11-4,使用DOM验证XML文档对XML模式的有效性,可以使用MSXml提供的XMLDOM对象来验证XML文档对于XML模式的有效性。用到一个很重要的XMLDOM对象XMLSchemaCache对象。XMLSchemaCache对象常用的方法如下:add(namespaceURI,variable):添加一个新模式到模式集中,并把特定的命名空间与模式相关联。addCollection(XMLSchemaCollectionobject):添加其他的模式集到XMLSchemaCache对象中,保证不同模式的命名空间不会冲突。Get(namespaceURI):该方法返回含有元素的节点。namespaseURI(indexnumber):该方法删除模式集中的指定模式。,使用DOM验证XML文档对XML模式的有效性,XMLSchemaCache对象有一个属性length,该属性返回包含在模式集中模式的个数。创建XMLSchemaCache对象的代码:varxsdSchemacache=newActiveXObjet(“Msxml2.XMLSchemaCache.4.0”);/创建DOMDocument对象实体varxmldoc=newActiveXObject(“Msxml2.FreeThreadedDOMDocument.4.0”);xmldoc.validateOnParse=true;xmldoc.load(“要验证的XML文档”);创建了各种对象的实例并载入DOMDocument对象中后,需要把模式与XML文档相关联。因此需要添加一个新模式到XMLSchemaCache对象中。varnamespace=xmldoc.document.namespaceURI;xsdSchemacache.add(namespace,”要关联的模式文件”);例11-5,使用演示表实时处理XML文档,使用XMLDOM,可以对XML文档中的数据进行读、写、修改等操作。人们也可以借助XMLDOM对象实时的把XSLT样式表和XML文档相关联。这需要用到XSLTemplate对象和IXSLProcessor对象。XSLTemplate对象是用来访问XSLT样式表的DOM对象。该对象可以动态处理XML稳定那个的缓存样式表。在样式表处理XML之前,解析器在第一次编译时先将样式表转换成树状结构,然后将此数状结构放在高速缓存中;此后,每次对样式表的连续使用,都是直接重用已编译好的版本。XSLT树状结构被载入计算机内存来处理XML文档时,XSLTemplate对象存储的就是编译好的XSLT文档。因此,使用样式表实时处理XML文档时必须先创建XSLTemplate对象。,使用演示表实时处理XML文档,创建XSLTemplate对象的代码:xsltoboj=newActiveXObject(“Msxml2.XSLTemplate.4.0”);该对象必须和XSLT样式表相关联:varxsldocobj=newActiveXObject(“FreeThreadedDOMDocument.4.0”);xsldocobj.load(“要使用的XSLT样式表文件”);xsltobj.stylesheet=xsldocobj;这里需要注意:FreeThreadedDOMDocument对象既可以访问XML文档,也可以访问XSLT样式表。,使用演示表实时处理XML文档,为了使用样式表处理XML文档,还必须创建IXSLProcessor对象,它把样式表应用于XML文档并且处理该文档。IXSLProcessor对象通过XSLT样式表把XML文档转换成另外的形式HTML。例如:varxslprocobj=xsltobj.createProcessor();上面的代码创建了新对象xslprocobj,它代表编译好的高速缓存中的XSLT模板。对象xsltobj中和变量xsldocobj中指定的样式表相关联。其转换过程如下:(1)创建IXSLProcessor对象。varxslprocobj=xsltobj.createProcessor();(2)创建xsltobj对象中包含的样式表所要作用的XML文档。varxmldocobj=newActiveXObject(“Msxml2.DOMDocument”);xmldocobj.load(“products.xml”);,使用演示表实时处理XML文档,(3)把XML文档作为输入传给IXSLProcessor对象的属性input,它载入必须要转换的XML树状结构。Xslprocobj.input=xmldocobj;(4)调用IXSLProcessor对象的transform()方法,完成XML文档的转换。Xslprocobj.transform();例11-6例11-7综合实例,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!