zoukankan      html  css  js  c++  java
  • Js+XML 操作

    我的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来定位节点,这样子会有更好的性能.

     

    补充一个网友的不错建议:

    在我们写javascript的时候经肯定会经常用到 document.getElementById() 这个方法,这么长一串很容易写错,而且其中getElementById又有大小写之分。 
    其实prototype.js里提倡的一个方法就是使用$()简写,通过以下的函数,你可以用$('id')来实现document.getElementById('id') 这个功能,怎么样,很爽吧! 

    function $() 

    var elements = new Array(); 
    for (var i = 0; i < arguments.length; i++) 

    var element = arguments[i]; 
    if (typeof element == 'string') 
    element = document.getElementById(element); 
    if (arguments.length == 1) 
    return element; 
    elements.push(element); 

    return elements; 

    而且这个函数更爽的是,如果你想它提交一个带多个id的数组后,他也会向你返回多个元素的Array!

  • 相关阅读:
    部署 AppGlobalResources 到 SharePoint 2010
    还原一个已删除的网站集
    使用仪表板设计器配置级联筛选器 (SharePoint Server 2010 SP1)
    File or arguments not valid for site template
    Pex and Moles Documentation
    Content Query Webpart匿名访问
    Running Moles using NUnit Console from Visual Studio
    Calling a WCF Service using jQuery in SharePoint the correct way
    Updating Content Types and Site Columns That Were Deployed as a Feature
    asp.net中判断传过来的字符串不为空的代码
  • 原文地址:https://www.cnblogs.com/douqiumiao/p/3165306.html
Copyright © 2011-2022 走看看