Js+XML 操作


Posted in Javascript onSeptember 20, 2006

xml文件Login.xml如下.

<?xml version="1.0" encoding="utf-8" ?> 
<Login> 
    <Character> 
        <C Text="热血" Value="0"></C> 
        <C Text="弱气" Value="1"></C> 
        <C Text="激情" Value="2"></C> 
        <C Text="冷静" Value="3"></C> 
        <C Text="冷酷" Value="4"></C> 
    </Character> 
    <Weapon> 
        <W Text="光束剑" Value="0"></W> 
        <W Text="光束配刀" Value="1"></W> 
    </Weapon> 
    <EconomyProperty> 
        <P Text="平均型" Value="0"></P> 
        <P Text="重视攻击" Value="1"></P> 
        <P Text="重视敏捷" Value="2"></P> 
        <P Text="重视防御" Value="3"></P> 
        <P Text="重视命中" Value="4"></P> 
    </EconomyProperty> 
</Login>

现在需要对这个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.getAttribute('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; i<l; i++) 
        { 
            var option    = document.createElement('option'); 
            option.value    = n[i].getAttribute('Value'); 
            option.innerHTML    = n[i].getAttribute('Text'); 
            e.appendChild(option); 
        } 
    } 
}

上面的访问代码中,我们是通过xmlDoc.getElementsByTagName(xPath)来进行的.
还可以通过xmlDoc.documentElement.childNodes(1)..childNodes(0).getAttribute('Text')进行访问.
一些常用方法:
xmlDoc.documentElement.childNodes(0).nodeName,可以得到这个节点的名称.
xmlDoc.documentElement.childNodes(0).nodeValue,可以得到这个节点的值. 这个值是来自于这样子的xml格式:<a>b</b>, 于是可以得到b这个值.
xmlDoc.documentElement.childNodes(0).hasChild,可以判断是否有子节点

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

Javascript 相关文章推荐
javascript 文档的编码问题解决
Mar 01 Javascript
js中的屏蔽的使用示例
Jul 30 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
Jan 06 Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
微信小程序  modal弹框组件详解
Oct 27 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
Sep 12 Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 Javascript
vue中英文切换实例代码
Jan 21 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
May 23 Javascript
发现的以前不知道的函数
Sep 19 #Javascript
多个iframe自动调整大小的问题
Sep 18 #Javascript
跨浏览器的设置innerHTML方法
Sep 18 #Javascript
JavaScript Base64编码和解码,实现URL参数传递。
Sep 18 #Javascript
JavaScript静态的动态
Sep 18 #Javascript
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 #Javascript
JavaScript中的私有成员
Sep 18 #Javascript
You might like
目录,文件操作详谈―PHP
2006/11/25 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
TypeScript类型声明书写详解
2019/08/28 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
纬创Java面试题笔试题
2014/10/02 面试题
手术室护士自我鉴定
2013/10/14 职场文书
商务司机岗位职责
2015/04/10 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
永不妥协观后感
2015/06/10 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书