仰天一笑

昨日不悔,今日勿失,明日莫忧! —徐羽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  230 随笔 :: 27 文章 :: 805 评论 :: 40 Trackbacks
我的xml文件Login.xml如下.
<?xml version="1.0" encoding="utf-8" ?>
<Login>
    
<Character>
        
<Text="热血" Value="0"></C>
        
<Text="弱气" Value="1"></C>
        
<Text="激情" Value="2"></C>
        
<Text="冷静" Value="3"></C>
        
<Text="冷酷" Value="4"></C>
    
</Character>
    
<Weapon>
        
<Text="光束剑" Value="0"></W>
        
<Text="光束配刀" Value="1"></W>
    
</Weapon>
    
<EconomyProperty>
        
<Text="平均型" Value="0"></P>
        
<Text="重视攻击" Value="1"></P>
        
<Text="重视敏捷" Value="2"></P>
        
<Text="重视防御" Value="3"></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来定位节点,这样子会有更好的性能.
posted on 2006-09-15 16:39 仰天一笑 阅读(4060) 评论(6)  编辑 收藏 所属分类: Javascript/Ajax/XML

评论

#1楼  2006-09-19 10:11 莫相会[匿名]      
转载的吧
  回复  引用  查看    

不是很理解,我要揣磨揣磨
  回复  引用    

#3楼  2007-07-10 23:18 yc [未注册用户]
在.net中下面代码出错了:
var e = $(oid);
应该是:
var e = document.getElementsByID(oid);

不知道各位是否也有这个问题。。。。

  回复  引用    

#4楼  2007-08-05 16:23 drr [未注册用户]
@yc
这们兄弟还不了解$()

  回复  引用    

那怎么样在客户端验证XML文件的架构呢?
  回复  引用    

#6楼  2008-05-21 10:37 vicps [未注册用户]
$调用的是prototype.js ,如果没有可以直接document.getElementById('');另外要在页加载完成后再调用
initializeSelect()
如果用jquery可以用
$(document).ready(function(){
initializeSelect()

})
  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: