javascript读取XML文件方法大集合.doc_第1页
javascript读取XML文件方法大集合.doc_第2页
javascript读取XML文件方法大集合.doc_第3页
javascript读取XML文件方法大集合.doc_第4页
javascript读取XML文件方法大集合.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在B/S系统中经常需要在客户端和服务器端之间交互数据,这些数据一般都是在客户端由Javscript组织然后发回服务器。对于一些复杂的数据我们一般用xml的格式组织。本文将给出javascript对xml的一些基本操作。 在javascript中是利用MSXml2组件对xml进行操作。该组件将xml加载到内存中形成一个树状的数据结构,可以利用XPath语言对其进行查询。 首先需要创建一个MSxml2.DOMDocument的对象,如下:var xmlDoc = new ActiveXObject(MSxml2.DOMDocument);,如果是ie5以上版本可以这样:CreateObject(“Microsoft.XMLDom);创建了dom对象以后就可以用它加载一个xml文件或一段xml字符串,如下:var strFilePath = “file.xml”;xmlDoc.load(strFilePath);/加载xml文件var strXml = “”;xmlDoc.loadXml(strXml);/加载xml字符串当然还可以创建一个空的DOCDocument,然后向里面填写内容。首先要创建xml的头(),如下:var = xmlDoc.createProcessingInstruction(xml,version=1.0);xmlDoc.appendChild(head);接下来为xml创建节点,如下:var rootNode = xmlDoc.createNode(1,Hello,);/参数1-节点类型;参数2-节点名称;参数3-节点的命名空间为节点创建属性, var attribut = xmlDoc.createAttribute(Name);/参数-属性名称 Attribute.value = “programer”;/为属性赋值 rootNode.setAttributeNode(attribut);/将属性附加到节点上为节点添加文本值, rootNode.value = “Who am I”;可以直接创建一个文本节点作为当前节点的子节点rootNode.appendChild(xmlDoc.createTextNode(“Who am I”);将节点添加到DOCDocument xmlDoc.appendChild(rootNode);当然还可以为一个节点创建子节点,如下 rootNode.appendChild(xnChileNode);利用XPath查找节点,也可以查找节点集 Var myNode = xmlDoc.selectSingleNode(“/Hello/NodeText=Who”);/查找目标的根节点的节点名为Hello,这条语句查询的是Hello节点下的节点名为Node的节点中Text属性/等于”Who”的节点Var myNodeList = xmlDoc.selectNodes(“/Hello/Node);/查询Hello节点下的全部Node节点删除节点,删除时只能删除某一个节点下的子节点,而不能直接删除孙节点。 Var myNode = xmlDoc.selectSingleNode(“/Hello/NodeText=Who”); Var helloNode = xmlDoc.selectSingleNode(“/Hello”); xmlDoc.removeChild(myNode);/错误 xmlDoc.removeChild(helloNode);/正确 helloNode.removeChild(myNode);/正确保存结果。可以将xmlDoc中的内容保存到文件中,也可以直接获取它的xml字符串,如下: xmlDoc.save(strFilePath);/保存到文件 alert(xmlDoc.xml);/输出xml字符串-我的xml文件login.xml如下. 现在我需要对这个xml文件的内容进行操作.首先,我们需要加载这个xml文件,js中加载xml文件,是通过xmldom来进行的./ 加载xml文档loadxml = function(xmlfile) var xmldoc; if(window.activexobject) xmldoc = new activexobject(microsoft.xmldom); xmldoc.async = false; xmldoc.load(xmlfile); else if (document.implementation&document.implementation.createdocument) xmldoc = document.implementation.createdocument(, , null); xmldoc.load(xmlfile); else return null; return xmldoc; xml文件对象出来了, 接下去我就要对这个文档进行操作了.比如说,我们现在需要得到节点login/weapon/w的第一个节点的属性,那么我们可以如下进行./ 首先对xml对象进行判断checkxmldocobj = function(xmlfile) var xmldoc = loadxml(xmlfile); if(xmldoc=null) alert(您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用ie5.0以上可以解决此问题!); window.location.href=/index.aspx; return xmldoc; / 然后开始获取需要的login/weapon/w的第一个节点的属性值var xmldoc = checkxmldocobj(/ebs/xml/login.xml);var v = xmldoc.getelementsbytagname(login/weapon/w)0.childnodes.getatspanibute(text)而我在我的程序中的写法是这样子的,当然我在程序中的写法是已经应用到实际中的了.一并给出来,以供查看initializeselect = function(oid, xpath) var xmldoc = checkxmldocobj(/ebs/xml/login.xml); var n; var l; var e = $(oid); if(e!=null) n = xmldoc.getelementsbytagname(xpath)0.childnodes; l = n.length; for(var i=0; il; i+) var option = document.createelement(option); option.value = ni.getatspanibute(value); option.innerhtml = ni.getatspanibute(text); e.appendchild(option); 上面的访问代码中,我们是通过xmldoc.getelementsbytagname(xpath)来进行的.还可以通过xmldoc.documentelement.childnodes(1).childnodes(0).getatspanibute(text)进行访问.一些常用方法:xmldoc.documentelement.childnodes(0).nodename,可以得到这个节点的名称.xmldoc.documentelement.childnodes(0).nodevalue,可以得到这个节点的值. 这个值是来自于这样子的xml格式:b, 于是可以得到b这个值.xmldoc.documentelement.childnodes(0).haschild,可以判断是否有子节点根据我的经验,最好是使用getelementsbytagname(xpath)的方法对节点进行访问,因为这样子可以直接通过xpath来定位节点,这样子会有更好的性能.!-var doc = new ActiveXObject(Msxml2.DOMDocument); /ie5.5+,CreateObject(Microsoft.XMLDOM)/加载文档/doc.load(b.xml);/创建文件头var p = doc.createProcessingInstruction(xml,version=1.0 encoding=gb2312);/添加文件头doc.appendChild(p);/用于直接加载时获得根接点/var root = doc.documentElement;/两种方式创建根接点/ var root = doc.createElement(students);var root = doc.createNode(1,students,);/创建子接点var n = doc.createNode(1,ttyp,);/指定子接点文本/n.text = this is a test;/创建孙接点var o = doc.createElement(sex);o.text = 男; /指定其文本/创建属性var r = doc.createAttribute(id);r.value=test;/添加属性n.setAttributeNode(r);/创建第二个属性var r1 = doc.createAttribute(class);r1.value=tt;/添加属性n.setAttributeNode(r1);/删除第二个属性n.removeAttribute(class);/添加孙接点n.appendChild(o);/添加文本接点n.appendChild(doc.createTextNode(this is a text node.);/添加注释n.appendChild(doc.createComment(this is a commentn);/添加子接点root.appendChild(n);/复制接点var m = n.cloneNode(true);root.appendChild(m);/删除接点root.removeChild(root.childNodes(0);/创建数据段var c = doc.createCDATASection(this is a cdata);c.text = hi,cdata;/添加数据段root.appendChild(c);/添加根接点doc.appendChild(root);/查找接点var a = doc.getElementsByTagName(ttyp);/var a = doc.selectNodes(/ttyp);/显示改接点的属性for(var i= 0;ia.length;i+)alert(ai.xml);for(var j=0;jvar xmlDoc = new ActiveXObject(Microsoft.XMLDOM) JAVASCRIPT中的创建对象 set objXml=CreateObject(Microsoft.XMLDOM) 创建解析器对象 objXml.async=false objXml.load(test.xml) 装载xml文件 objXml.load(Server.MapPath(test.xml) 根据绝对路径装载xml文件 Set objRootsite = xmlDoc.getElementsByTagName(NewList) 查找某一节点NewList objNextRootsiteName = xmlDoc.getElementsByTagName(NewList).item(0).nodeName Set objRootsite = objXml.documentElement.selectSingleNode(NewList) 查找某一节点NewList document.write(objRootsite.nodeName) 当前节点名称 objNextRootsite = objRootsite.childNodes.item(1) 查找NewList的第一子节点 objNextRootsiteText = objNextRootsite.childNodes.item(1).text 查找NewList的第一子节点的节点内容 xmlChildNode = objXml.documentElement.childNodes 获取当前节点 document.Write (xmlChildNode.nodename) 当前节点名称 document.write (xmlChildNode.text) 当前节点文本内容 frm.label.innerText = xmlChildNode.item(1).text 将Xml中的文本内容转换为Html中的内容 xmlChildNode.GetAttributeNode(name).Nodevalue 获取属性名为name的属性值 xmlChildNode.length xmlChildNode节点的子节点数量 取出一个节点的属性集合 set objnodes=objXml.documentElement.SelectSingleNode(/people/man).GetAttributeNode(name).attributes for each element in objnodes response.write element.nodename 属性名 response.write element.nodevalue 属性值 next xmlDoc.getElementsByTagName(from).item(0).text xmlDoc.removeChild objRootsite 删除某个节点 objXml.parseError 错误接受容器 objXml.parseError.errorCode 返回长整型错误代码 objXml.parseError.reason 返回字符串型错误原因 objXml.parseError.line 返回长整型错误行号 objXml.parseError.linePos 返回长整型错误行字符位置 objXml.parseError.srcText 返回错误所在行的源代码 objXml.parseError.url 返回url装载文档指针-最近一份含有解析错误的XML文档的URL地址 objXml.parseError.filePos 返回长整型错误文件位置-在文档中的绝对字符位置1. /首先:xml文件(tree.xml)内容如下: 山东省 _blank 省份 威海市 _blank 城市 烟台市 _blank 城市 长夼村 _blank 乡镇 / 富镇 _blank 乡镇 / 河北省 _blank 省份 泊头市 _blank 城市 郊河 _blank 乡镇 / 石家庄 _blank 城市 浙江省 _blank 省份 杭州市 _blank 城市 某镇 _blank 乡镇 / 温州市 _blank 城市 某镇 _blank 乡镇 / /然后:javascript函数实现:(文件名称:tree.htm)var HTML = ;var space = ;var blank = ;function getSubject() var xmlDoc; if(window.ActiveXObject) /获得操作的xml文件的对象 xmlDoc = new ActiveXObject(Microsoft.XMLDOM); xmlDoc.async = false; xmlDoc.load(tree.xml); if(xmlDoc = null) alert(您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!); window.location.href=/Index.aspx; return; /解析xml文件,判断是否出错 if(xmlDoc.parseError.errorCode != 0) alert(xmlDoc.parseError.reason); return; /获得根接点 var nodes = xmlDoc.documentElement.childNodes; /得到根接点下共有子接点个数,并循环 for(var i=0; inodes.length; i+) /如果接点名为 tree if(nodes(i).nodeName = tree) readTree(nodes(i); /如果接点名为 node else if(nodes(i).nodeName = node) readNode(nodes(i); /删除对象 delete(xmlDoc); /显示HTML window.show.innerHTML = HTML; return;/读Tree节点function readTree(cI) var nodes = cI.childNodes; var menuHTML = space; menuHTML += blank; /得到超级链接 menuHTML += ; /得到节点的正文 menuHTML += cI.selectNodes(text)(0).text; menuHTML += n; /将menuHTML设置添加到HTML字符串 HTML += menuHTML; /得到该节点的属性值span HTML += n; for(var i=0; inodes.length; i+) var tempImg = ; tempImg += blank; if(nodes(i).nodeName = tree) space += tempImg; readTree(nodes(i); space = ; else if(nodes(i).nodeName = node) space += tempImg; readNode(nodes(i); HTML += n; return;/读Node节点function readNode(cI) var nodeHTML = space; nodeHTML += blank; /设置超级链接 nodeHTML += ; /得到节点的正文 nodeHTML += cI.selectNodes(text)(0).text; nodeHTML += n; HTML += nodeHTML; /HTML += ; space = ; return;/操作对象的显示还是隐藏效果function divshow(vid) if(document.allvid.style.display = none) document.allvid.style.display = block; else document.allvid.style.display = none; return;JS_XMLgetSubject()/2. 3. 数据岛的显示4. 5. #findPanel6. 7. position:absolute;8. width:220px;9. border:1pxsolid#666666;10. 11. 12. #findPanelTitle13. 14. height:10px;15. background-color:#336699;16. cursor:move;17. 18. 19. #findPanelContent20. 21. padding:5px5px5px5px;22. background-color:#6699CC;23. 24. 25. 26. 27. 28. 29. !-30. 31. varxmlDoc=newActiveXObject(Msxml2.DOMDocument);32. xmlDoc.async=false;33. xmlDoc.resolveExternals=false;34. xmlDoc.load(stu.xml);35. /alert(xmlDoc.xml);36. /显示数据37. functionshow()38. varvbo=document.getElementById(s).value;39. if(vbo=显示学生信息)40. document.getElementById(info).style.visibility=visible;41. document.getElementById(s).value=隐藏学生信息;42. else43. document.getElementById(info).style.visibility=hidden;44. document.getElementById(s).value=显示学生信息;45. 46. 47. /查找48. functionque()49. document.getElementById(ad).style.visibility=visible;50. document.getElementById(qmd).style.visibility=visible;51. 52. 53. /*54. *解析XML文件函数55. *paramxmlDocXML对象56. *paramname属性名称格式如:57. */58. functiongetXMLProperty(xmlDoc,name)59. varkeys=name.split(.);60. varnode=xmlDoc.documentElement;61. for(vari=0;ikeys.length;i+)62. varchilds=node.childNodes;63. varkey=keysi;64. for(vark=0;kchilds.length;k+)65. varchild=childsk;66. if(child.nodeName=key)67. if(child.childNodes.length=1)68. returnchild.text;69. else70. node=child;71. break;72. 73. 74. 75. 76. return;77. 78. /返回父节点(通过节点名字和节点值)79. functiongetNod(nam,val)80. varnode=xmlDoc.documentElement;81. varchilds=node.childNodes;82. for(vari=0;ichilds.length;i+)83. 84. varchild=childsi;85. varchildms=child.childNodes;86. for(vark=0;kchildms.length;k+)87. varchildm=childmsk;88. if(childm.nodeName=nam&(childm.text).substring(0,6)=val)89. /alert(val);90. returnchild;91. 92. 93. 94. return;95. 96. /通过父节点和子节点名返回子节点值97. functiongetNodVal(nods,nam)98. varchildms=nods.childNodes;99. for(vark=0;kchildms.length;k+)100. varchildm=childmsk;101. if(childm.nodeName=nam)102. /alert(childm.text);103. returnchildm.te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论