JavaScript解析XML的方法总结

转自:http://www.php100.com/html/webkaifa/javascript/2010/0529/4615.html

 

  经常会用到一些XML与JAVASCRIPT结合写一些程序,像下拉菜单,还有多级联运等等,一般都是xml+......什么什么的,数据用了xml,本来xml就是树形目录,就打算用JavaScript直接解析xml文件了,网上找到一些JavaScript操作xml的方法,在此做一个总结。

  先看下本例中XML数据结构

 

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2.  
  3. <Login> 
  4.  
  5. <Character> 
  6.  
  7. <C Text="热血" Value="0"></C> 
  8.  
  9. <C Text="弱气" Value="1"></C> 
  10.  
  11. <C Text="激情" Value="2"></C> 
  12.  
  13. <C Text="冷静" Value="3"></C> 
  14.  
  15. <C Text="冷酷" Value="4"></C> 
  16.  
  17. </Character> 
  18.  
  19. <Weapon> 
  20.  
  21. <W Text="光束剑" Value="0"></W> 
  22.  
  23. <W Text="光束配刀" Value="1"></W> 
  24.  
  25. </Weapon> 
  26.  
  27. <EconomyProperty> 
  28.  
  29. <P Text="平均型" Value="0">&nbsp;</P> 
  30.  
  31. <P Text="重视攻击" Value="1">&nbsp;</P> 
  32.  
  33. <P Text="重视敏捷" Value="2">&nbsp;</P> 
  34.  
  35. <P Text="重视防御" Value="3">&nbsp;</P> 
  36.  
  37. <P Text="重视命中" Value="4">&nbsp;</P> 
  38.  
  39. </EconomyProperty> 
  40.  
  41. </Login> 

  现在我需要对这个xml文件的内容进行操作。

  首先,我们需要加载这个xml文件,JavaScript中加载xml文件,是通过XMLDOM来进行的:

 

  1. // 加载xml文档  
  2.  
  3. loadXML = function(xmlFile)  
  4.  
  5. {  
  6.  
  7. var xmlDoc;  
  8.  
  9. if(window.ActiveXObject)  
  10.  
  11. {  
  12.  
  13. xmlDoc = new ActiveXObject('Microsoft.XMLDOM');  
  14.  
  15. xmlDoc.async = false;  
  16.  
  17. xmlDoc.load(xmlFile);  
  18.  
  19. }  
  20.  
  21. else if (document.implementation&&document.implementation.createDocument)  
  22.  
  23. {  
  24.  
  25. xmlDoc = document.implementation.createDocument(''''null);  
  26.  
  27. xmlDoc.load(xmlFile);  
  28.  
  29. }  
  30.  
  31. else 
  32.  
  33. {  
  34.  
  35. return null;  
  36.  
  37. }  
  38.  
  39. return xmlDoc;  
  40.  
  41. }  

  xml文件对象出来了, 接下去我就要对这个文档进行操作了。

  比如说,我们现在需要得到节点Login/Weapon/W的第一个节点的属性,那么我们可以如下进行:

 

  1. // 首先对xml对象进行判断  
  2.  
  3. checkXMLDocObj = function(xmlFile)  
  4.  
  5. {  
  6.  
  7. var xmlDoc = loadXML(xmlFile);  
  8.  
  9. if(xmlDoc==null)  
  10.  
  11. {  
  12.  
  13. alert('您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');  
  14.  
  15. window.location.href='/Index.aspx';  
  16.  
  17. }  
  18.  
  19. return xmlDoc;  
  20.  
  21. }  
  22.  
  23. // 然后开始获取需要的Login/Weapon/W的第一个节点的属性值  
  24.  
  25. var xmlDoc = checkXMLDocObj('/EBS/XML/Login.xml');  
  26.  
  27. var v = xmlDoc.getElementsByTagName('Login/Weapon/W')[0].childNodes.getAttribute('Text')  

  而我在我的程序中的写法是这样子的,当然我在程序中的写法是已经应用到实际中的了.一并给出来,以供查看。

 

  1. initializeSelect = function(oid, xPath)  
  2.  
  3. {  
  4.  
  5. var xmlDoc = checkXMLDocObj('/EBS/XML/Login.xml');  
  6.  
  7. var n;  
  8.  
  9. var l;  
  10.  
  11. var e = $(oid);  
  12.  
  13. if(e!=null)  
  14.  
  15. {  
  16.  
  17. n = xmlDoc.getElementsByTagName(xPath)[0].childNodes;  
  18.  
  19. l = n.length;  
  20.  
  21. for(var i=0; i<l; i++)  
  22.  
  23. {  
  24.  
  25. var option = document.createElement('option');  
  26.  
  27. option.value = n[i].getAttribute('Value');  
  28.  
  29. option.innerHTML = n[i].getAttribute('Text');  
  30.  
  31. e.appendChild(option);  //php100.Com
  32.  
  33. }  
  34.  
  35. }  
  36.  
  37. }  

  上面的访问代码中,我们是通过xmlDoc.getElementsByTagName(xPath)来进行的。

  还可以通过xmlDoc.documentElement.childNodes(1)..childNodes(0).getAttribute('Text')进行访问。

  一些常用方法://php100.com

  ◆ xmlDoc.documentElement.childNodes(0).nodeName,可以得到这个节点的名称;

  ◆ xmlDoc.documentElement.childNodes(0).nodeValue,可以得到这个节点的值. 这个值是来自于这样子的xml格式:b, 于是可以得到b这个值;

  ◆ xmlDoc.documentElement.childNodes(0).hasChild,可以判断是否有子节点。

  根据我的经验,最好是使用getElementsByTagName(xPath)的方法对节点进行访问,因为这样子可以直接通过xPath来定位节点,这样子会有更好的性能。

阅读更多
个人分类: Web开发
想对作者说点什么? 我来说一句

JavaScript解析XML方法总结.

2011年04月17日 36KB 下载

javascript解析xml方法

2009年07月27日 5KB 下载

javascript读取XML文件方法

2012年11月10日 262KB 下载

android解析xml的4种方法

2014年05月04日 2.19MB 下载

Qt解析XML文件

2015年07月01日 4KB 下载

JAVA 解析xml

2009年05月18日 11.93MB 下载

没有更多推荐了,返回首页

不良信息举报

JavaScript解析XML的方法总结

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭