• 1. 第5章 XML DOM编程模型
  • 2. 目标理解DOM模型 解析XML文档,生成文档对象 操纵DOM模型的对象、接口、属性、方法
  • 3. 5.1 文档对象模型概述DOM(Document Object Model)定义了文档的逻辑结构和访问、操纵文档的方法。它为XML、HTML提供了应用程序接口API。 DOM中的对象允许开发者从文档中读取、搜索、修改、增加和删除数据-它们为文档导航提供了标准的功能定义,并且操纵XML文档的内容和结构。 DOM提供的对象和方法可以和任何编程语言(java、c++、VB)一起使用,也可以与VBScript、JavaScript脚本语言一切使用。
  • 4. 5.2 XML解析器DOM SAX JDOM DOM4J MSXML等
  • 5. 5.3 DOM解析树最常见的节点类型: 元素:元素是 XML 的基本构件。元素可以有其它元素、文本节点或两者兼有来作为其子节点。元素节点还是可以有属性的唯一类型的节点。 属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点 文本:文本节点是:文本。它可以包含许多信息或仅仅是空白。 文档(根节点):文档节点是整个文档中所有其它节点的父节点。(根节点不等于根元素节点!) 较不常见的节点类型:CDATA、注释、处理指令
  • 6. XML文档 曹雪芹 红楼梦 孙更新 XML实用大全
  • 7. DOM解析树文本authorbooksbookbookauthortitletitle曹雪芹红楼梦孙更新XML实用大全文档(根节点)根元素节点元素
  • 8. MSXML解析XML文档的过程
  • 9. 5.4 MSXML DOM模型结构 XML DOM提供让你遍历、读取和操纵XML文档的结构和内容,其主要对象和方法有: DOMDocument对象:描述全部文档映射表,它包括文档所有信息。 IXMLDOMNode对象:描述文档里的节点,此节点可以是元素、属性、处理指令、文本或其他存储在XML文档里的信息。 IXMLDOMNodeList对象:描述节点对象的集合,可以使用该对象遍历这个集合,可以用数值访问。 IXMLDOMParseError对象:用来验证XML文档对于DTD、XSD的正确性。
  • 10. 5.4.1 DOMDocument对象 DOMDocument 对象表示DOM树的最顶层节点,它实现了使用XML文档所需的所有方法: createElement(elementname) :创建以元素名命名的节点,但名称空间受限制的元素除外 createAttribute(attributename):创建以属性名命名的属性节点 createComment(text):创建注释节点 createTextNode(text):创建正文节点
  • 11. createNode(type,name,namespace-URI): 建节点,type可以是1(元素)、2(属性), 3(文本节点),name为节点名, namespace-URI为名称空间。 getElementsByTagName(elementName):elementName代表要搜索的元素,返回IXMLDOMNodeList对象包含的节点集合。 Load(XMLdocment):有2种方法可以载入XML文件。例docobj.load(“http:www.ecomtcybershoppe.com/products.xml”)或docobj.load(“c: \product.xml”)
  • 12. LoadXML(string):把成形的代码或整个XML文档载入DOMDocument对象中。 transformNode(style sheet object):把样式表加到XML文档上处理节点,返回转换结果。 appendChild(child node):把用createNode()或createElement()方法创建的节点或元素,追加到树形结构上。 Save(destination):把DOMDocument对象保存到指定目的地。例docobj.save(“http://www. cybershop.com/product.xml”)
  • 13. DOMDocument对象的属性async:指定是否允许异步加载,取布尔值。如果为true,即使文档仍在载入,脚本也会继续执行;为false时,脚本会等待文档全部被载入后才会执行代码。一般用 docobj.async=false childNodes:返回属于父节点的子节点。其值是IXMLDOMNodeLisT类型。例 var firstelem=docobj.childNodes.item(0) documentElement:包含用DOMDocument表示的XML文档的根元素。例 var root=docobj.documentElement firstChild:返回父元素的第一个子节点,该属性是只读的。例 var firstelem=firstChild lastChild:返回父元素的最后一个子节点。例var firstelem=lastChild
  • 14. parseError:该属性返回一个包含大部分最近产生的错误信息的对象。例 var error=docobj.parseError readyState:返回文档的状态,1—正在载入中;2—已下载;3—对话;4—结束。例 var stateinfo=docobj.readyState xml :返回一个节点及其子节点的XML表示。例document.write(docobj.xml) validateOnPage:指定解析器是否在解析XML文档时验证其合法性。例docobj.validateOnPage=true
  • 15. 5.4.2 IXMLDOMNode对象 IXMLDOMNode对象代表XML文档树形结构中的一个单个节点,它可能包含其他子节点的元素。使用方法有: appendChild(newChild):把newChild加到使用节点的子节点的末尾。 insertBefore(newNode,refNode):把newNode插在已存节点refNode之前。 removeChild(nodeName):删除指定节点。 replaceChild(newNode,oldNode):替换节点。 hasChildnode():查找子节点。 cloneNode(boolean):克隆节点,如为true,返回IXMLDOMNode对象的完全克隆。
  • 16. IXMLDOMNode属性nodeName: 返回节点名称。 nodeType: 返回节点类型。 Nodevalue: 返回节点包含的文本。 childNodes: 返回节点的子节点数。 firstChild: 返回该节点的第一个子节点。 lastChild: 返回该节点的最后一个子节点。 Text: 返回在IXMLDOMNode对象中的文本。 Xml: 返回IXMLDOMNode对象的代码。
  • 17. 5.4.3 IXMLDOMNodelist对象为了操纵XML文档, IXMLDOMNodelist对象提供存在于XML文档中的节点集合。节点集对象的改变立即反映到节点集上。 IXMLDOMNodelist对象也可以遍历节点集。 方法1:item(number),返回指定数值对应位置的节点。 方法2:nextNode(),返回节点集的下一个节点。 使用IXMLDOMNodelist属性length可以获得节点集中节点的个数。
  • 18. 5.4.4 IXMLDOMParseError对象 IXMLDOMParseError对象返回大部分最近发生的解析错误。 IXMLDOMParseError对象提供各种属性来检索错误,如错误代码、错误内容、引起错误的行代码等。 errorCode: 该属性包含长整形错误代码,没有错误,返回0。 reason: 该属性包含解释错误原因的字符串。 Line: 该属性存储代表错误行数的长整形。 linePos: 该属性存储代表错误位置的长整形。 srcText: 该属性包含引起错误的那一行字符串。
  • 19. 5.5 DOM编程步骤 DOM编程第一步就是确保机器上安装了Microsoft XML 4.0(或更高版本)。 在MSXML解析器的使用过程中,我们可以使用文档中的CreateElement方法创建一个节点来装载和保存XML文件,也可以通过Load或者是 LoadXML方法从一个指定的URL来装载一个XML文档。 Save方法是用来把文档保存到一个指定的位置。Save方法中参数destination用来表示需要被保存的对象的类型,对象可以是一个文件、一个ASP Response方法、一个XML文档对象,或者是一个能够支持持久保存(persistence)的客户对象。
  • 20. 示例文件books.xml B-1023 7-302-01685-2 经济学原理 经济学 陈章武 55.5000 清华大学出版社 B-1024 7-111-09311-9 XML技术内幕 计算机 Natanya Pitts 65.0000 机械工业出版社 B-0215 7-302-07198-5 Java2核心技术 程序设计 Cay S. Horstmann 49.0000 清华大学出版社
  • 21. 使用Javascript编写生成DOM文档对象的方法var xmlDoc=new ActiveXObject(" Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.load(“books.xml"); 生成XML文档对象xmlDoc,xmlDoc中包含XML文档中所有元素和节点 装载XML文档完毕后才开始处理下一步骤 将XML文档装载到文档对象中,在内存中形成文档对象树
  • 22. 通过微软的 XML 解析器加载 XML下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器: xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.load("books.xml"); 代码解释: 第一行创建空的微软 XML 文档对象 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本 第三行告知解析器加载名为 "books.xml" 的文档 下面的 JavaScript 片段把名为 txt 的字符串载入解析器中: xmlDoc=new ActiveXObject(“Microsoft.XMLDOM”);xmlDoc.async=“false”;xmlDoc.loadXML(txt); 注释:loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。
  • 23. 在 Firefox 及其他浏览器中的 XML 解析器下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器: xmlDoc=document.implementation.createDocument("","",null);xmlDoc.async="false";xmlDoc.load("books.xml"); 代码解释: 第一行创建空的 XML 文档对象 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本 第三行告知解析器加载名为 "books.xml" 的文档 下面的 JavaScript 片段把名为 txt 的字符串载入解析器中: parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml"); 代码解释: 第一行创建一个空的 XML 文档对象 第二行告知解析器加载名为 txt 的字符串 注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
  • 24. 解析 XML 文件 - 一个跨浏览器的实例下面的例子把 XML 文档 (“books.xml”) 载入 XML 解析器:
  • 25. XML DOM - 属性和方法DOM 把 XML 模拟为一系列节点接口。可通过 JavaScript 或其他编程语言来访问节点。 对 DOM 的编程接口是通过一套标准的属性和方法来定义的。 属性经常按照“某事物是什么”的方式来使用(例如节点名是 "book")。 方法经常按照“对某事物做什么”的方式来使用(例如删除 "book" 节点)。
  • 26. XML DOM 属性和方法一些典型的 DOM 属性: x.nodeName - x 的名称 x.nodeValue - x 的值 x.parentNode - x 的父节点 x.childNodes - x 的子节点 x.attributes - x 的属性节点 注释:在上面的列表中,x 是一个节点对象。 XML DOM 方法 x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素 x.appendChild(node) - 向 x 插入子节点 x.removeChild(node) - 从 x 删除子节点 注释:在上面的列表中,x 是一个节点对象。
  • 27. 实例从 books.xml 中的 元素获取文本的 JavaScript 代码: txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue 在此语句执行后,txt 保存的值是 "Everyday Italian"。 解释: xmlDoc - 由解析器创建的 XML DOM getElementsByTagName("title")[0] - 第一个 <title> 元素 childNodes[0] - <title> 元素的第一个子节点 (文本节点) nodeValue - 节点的值 (文本自身) 在上面的例子中,getElementsByTagName 是方法,而 childNodes 和 nodeValue 是属性。</li><li data-id="28">28. 实例下面的代码片段使用 loadXMLDoc 函数把 books.xml 载入 XML 解析器中,并显示第一个 book 的数据: xmlDoc=loadXMLDoc("books.xml"); document.write(xmlDoc.getElementsByTagName("title") [0].childNodes[0].nodeValue); document.write("<br />"); document.write(xmlDoc.getElementsByTagName("author") [0].childNodes[0].nodeValue); document.write("<br />"); document.write(xmlDoc.getElementsByTagName("year") [0].childNodes[0].nodeValue); 输出: Harry PotterJ K. Rowling2005 </li><li data-id="29">29. XML DOM 访问节点访问节点 可以通过三种方法来访问节点: 通过使用 getElementsByTagName() 方法 通过循环(遍历)节点树 通过利用节点的关系在节点树中导航 </li><li data-id="30">30. getElementsByTagName() 方法getElementsByTagName() 返回拥有指定标签名的所有元素。 语法 node.getElementsByTagName("tagname"); 实例 下面的例子返回 x 元素下的所有 <title> 元素: x.getElementsByTagName("title"); 请注意,上面的例子仅返回 x 节点下的 <title> 元素。要返回 XML 文档中的所有 <title> 元素,请使用: xmlDoc.getElementsByTagName("title"); 在这里,xmlDoc 就是文档本身(文档节点)。 </li><li data-id="31">31. DOM Node ListgetElementsByTagName() 方法返回节点列表 (node list)。节点列表是节点的数组。 下面的代码通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中,然后在变量 x 中存储 <title> 节点的一个列表: xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title"); 可通过下标访问 x 中的 <title> 元素。要访问第三个 <title>,可以编写:y=x[2]; </li><li data-id="32">32. 遍历节点下面的代码循环根节点的子节点,同时也是元素节点: xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i<x.length;i++) { if (x[i].nodeType==1) {//Process only element nodes (type 1) document.write(x[i].nodeName); document.write("<br />"); } } </li><li data-id="33">33. 5.6 本章小结DOM为处理X M L文档提供了可编程的方法。 • DOM允许我们在客户端和服务器端修改XML数据结构。 • DOM为数据库之间的信息传递提供了理想的机制。 • DOM在不同的平台上可以有不同的实现方式。 • DOM是内存密集型操作,它不适于处理大型XML文件。</li> </ul> </div> <div role="tabpanel" class="tab-pane active" id="profile"> <img class="detail-img" src="https://sppt.open-open.com/image/e5256a354c8bf0b14e4fb60061a03739_all"> </div> </div> </div> </div> <div class="col-md-4"> <div class="box side-box "> <div class="title"> <h3><i class="fa fa-tags" aria-hidden="true"></i> 关键词</h3> </div> <p class="tags mt10"> <a class="" href="/ppt/tag/qianduan-jishu.html">前端技术</a> <a class="" href="/ppt/tag/html.html">HTML</a> <a class="" href="/ppt/tag/java.html">Java</a> <a class="" href="/ppt/tag/javascript.html">JavaScript</a> <a class="" href="/ppt/tag/vbscript.html">VBScript</a> </p> </div> <div class="box side-box "> <div class="title"> <h3>相关PPT</h3> </div> <div class="items"> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/2ee0d11657ec46f4864d9749df955f85.html" target="_blank"><img src="https://sppt.open-open.com/img_w/e5256a354c8bf0b14e4fb60061a03739_0_100"></a></div><div class="content"><a href="/ppt/2ee0d11657ec46f4864d9749df955f85.html"> 第5章 xml编程原理(2学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/7a2202d346264dd7a38f2ae85197d3a5.html" target="_blank"><img src="https://sppt.open-open.com/img_w/717c6e1ea861fa7f941e83530fc03bb1_0_100"></a></div><div class="content"><a href="/ppt/7a2202d346264dd7a38f2ae85197d3a5.html"> 第5章 xlink和xpointer(4学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/2b4d1647ee7d4df3ab4f06b727fa23c8.html" target="_blank"><img src="https://sppt.open-open.com/img_w/f1d590fef0aadf54e57ec2e0088bc272_0_100"></a></div><div class="content"><a href="/ppt/2b4d1647ee7d4df3ab4f06b727fa23c8.html"> 第6章 基于.net的xml编程技术(6学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/83147782e382468e9ad36a9374c1f9ff.html" target="_blank"><img src="https://sppt.open-open.com/img_w/b70640903dad900d207f95bf1248c4d8_0_100"></a></div><div class="content"><a href="/ppt/83147782e382468e9ad36a9374c1f9ff.html"> 第4章 xml的显示-css与xslt(6学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/9a50ec8e94534ce294b7a0d4b1be78bc.html" target="_blank"><img src="https://sppt.open-open.com/img_w/5c9c57a680681954d58720dcfde43030_0_100"></a></div><div class="content"><a href="/ppt/9a50ec8e94534ce294b7a0d4b1be78bc.html"> 第7章 xml与数据库(2学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/43c68ea7e29c4888a13b54005584ca91.html" target="_blank"><img src="https://sppt.open-open.com/img_w/1a94d88cc6d3452cb4b88cfa4d867dab_0_100"></a></div><div class="content"><a href="/ppt/43c68ea7e29c4888a13b54005584ca91.html"> 第2章 javascript(10课时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/b5fcc339a5ee42c2a9d22171283da1f0.html" target="_blank"><img src="https://sppt.open-open.com/img_w/396f2da852e241341740475adacc505d_0_100"></a></div><div class="content"><a href="/ppt/b5fcc339a5ee42c2a9d22171283da1f0.html"> 第8章 web服务(2学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/37e9aa3ca0a14df69f07e53baa433029.html" target="_blank"><img src="https://sppt.open-open.com/img_w/b4ecffc6e65bb5804a55c29f086d8c08_0_100"></a></div><div class="content"><a href="/ppt/37e9aa3ca0a14df69f07e53baa433029.html"> XML与web技术 第1章 xml概述及html简介</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/d36c161d54454492a30b20e57abe5be2.html" target="_blank"><img src="https://sppt.open-open.com/img_w/42441af34f9a5b7354bbc14f4c71c62f_0_100"></a></div><div class="content"><a href="/ppt/d36c161d54454492a30b20e57abe5be2.html"> 第9章 简单对象访问协议 SOAP(2学时)</a></div></div> <div class="item mt10 clearfix"><div class="image" style="width: 100px;"><a href="/ppt/707cf59b1dbf4623952bbab626dbd2af.html" target="_blank"><img src="https://sppt.open-open.com/img_w/35cd943c9d66a8e8d8f82930b845df00_0_100"></a></div><div class="content"><a href="/ppt/707cf59b1dbf4623952bbab626dbd2af.html"> 第3章 xml数据的底层结构—dtd 和xml schema(8学时)</a></div></div> </div> </div> </div> </div> </div> </div> <footer > <div class="container py-5"> <div class="row"> <div class="col-md-3"> <h5>社区</h5> <div class="row"><div class="col-md-6"><a class="text-muted" href="/project/">项目</a></div><div class="col-md-6"><a class="text-muted" href="/solution/">问答</a></div><div class="col-md-6"><a class="text-muted" href="/wenku/">文库</a></div><div class="col-md-6"><a class="text-muted" href="/code/">代码</a></div><div class="col-md-6"><a class="text-muted" href="/lib/">经验</a></div><div class="col-md-6"><a class="text-muted" href="/news/">资讯</a></div></div> <ul class="list-unstyled text-small ut-mt20"><li><a class="text-muted" title=" 安卓开发专栏" target="_blank" href="http://www.open-open.com/lib/list/177">安卓开发专栏</a></li><li><a class="text-muted" href="http://www.open-open.com/lib/tag/开发者周刊" target="_blank" rel="tag">开发者周刊</a></li><li><a class="text-muted" href="http://www.open-open.com/lib/view/open1475497562965.html" target="_blank" rel="tag">Android Studio 使用推荐</a></li><li><a class="text-muted" href="http://www.open-open.com/lib/view/open1475497355674.html" target="_blank" rel="tag">Android开发推荐</a></li></ul> </div> <div class="col-md-3"> <h5>帮助中心</h5> <ul class="list-unstyled text-small"><li><a class="text-muted" href="/upload.html">文档上传须知</a></li></ul> <h5>关于我们</h5> <ul class="list-unstyled text-small"><li><a class="text-muted" href="/about.html">关于深度开源</a></li><li><a class="text-muted" href="/duty.html">免责声明</a></li><li><a class="text-muted" href="/contact.html">联系我们</a></li></ul> </div> <div class="col-md-6 text-center"><img class=center-block src="https://static.open-open.com/img/logo01.svg" width=190px alt="深度开源"><small class="d-block mb-3 text-muted ut-mt40">© 2006-2019 深度开源 —— 开源项目,开源代码,开源文档,开源新闻,开源社区  杭州精创信息技术有限公司  <br/><br/><img src="https://static.open-open.com/img/beian.png"/><a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=33010602002439">  浙公网安备 33010602002439号</a>  <a target="_blank" href="http://www.beian.miit.gov.cn">浙ICP备09019653号-31</a></small></div> </div> </div> </footer> <div id="fTools"><span id="gotop"> <i class="fa fa-arrow-up" aria-hidden="true"></i> </span><span id="feedback" title="建议反馈"> <i class="fa fa-inbox" aria-hidden="true"></i></span></div> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script type="text/javascript" src="https://static.open-open.com/js/lib.js"></script> <script type="text/javascript" src="https://static.open-open.com/assets/jquery-confirm/jquery-confirm.js?v=4.7.0"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> <script src="https://static.open-open.com/js/bootstrap.min.js"></script> <script type="text/javascript" src="https://static.open-open.com/js/base.js?v=2.002"></script> <script type="text/javascript" src="https://static.open-open.com/js/jq-plug.js?v=2.002"></script> <script> $(function () { JC.reminderPop();//弹出用户信息 $(".link-login").click(function(){ JC.lORr('login'); }); $("#topSearch").searchInit(); //用户登录状态 JC.setLogin(false); }); </script> <!-- JavaScript at the bottom for fast page loading --> <script type="text/javascript" src="https://static.open-open.com/js/playslides.js?v=2.001"></script> <script> JC.init("", "5886", "ppt", 6,false); var consume_gold_cost = 5, uId = "", cId = "5886", slug = "2ee0d11657ec46f4864d9749df955f85", title = "第5章 xml编程原理(2学时)", summary = ""; var category_name = ""; var tagList = [{id:1437, name: "前端技术"}, {id:123, name: "HTML"}, {id:61, name: "Java"}, {id:33, name: "JavaScript"}, {id:20064, name: "VBScript"}]; var num_page = "1"; var jc = {}, fav = []; $(function () { window._bd_share_config = {"common": {"bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "32"}, "share": {}};with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'https://static.open-open.com/assets/baidushare/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)]; var images = {thumb: [], big: []}; var pages =33; var img = 'https://sppt.open-open.com/image/e5256a354c8bf0b14e4fb60061a03739_'; for (var i = 0; i < pages; i++) { images.thumb.push(img + i + "_98_54"); images.big.push(img + i); } var slide = $('.slide-box').pss({autoSlide: false, scale: [16, 9], images: images, maxHeight: 405}); $("#article_content li").click(function () {slide.slide_goto($(this).data("id"));$('body,html').animate({scrollTop:0}, 500);}); }); </script> <script src="https://static.open-open.com/js/docshow.js?v=2.001"></script> <script> (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); (function () {var src = "https://jspassport.ssl.qhimg.com/11.0.1.js?40291de101d60af5180c55eb7057c18e";document.write('<script src="' + src + '" id="sozz"><\/script>');})(); </script> <!-- end scripts --> </body> </html>