Js+XML 操作

我的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)
{
????varxmlDoc;
????if(window.ActiveXObject)
????{
????????xmlDoc????=newActiveXObject('Microsoft.XMLDOM');
????????xmlDoc.async????=false;
????????xmlDoc.load(xmlFile);
????}
????elseif(document.implementation&&document.implementation.createDocument)
????{
????????xmlDoc????=document.implementation.createDocument('',?'',?null);
????????xmlDoc.load(xmlFile);
????}
????else
????{
????????returnnull;
????}
????
????returnxmlDoc;
}


xml文件對象出來了, 接下去我就要對這個文檔進行操作了.
比如說,我們現在需要得到節點Login/Weapon/W的第一個節點的屬性,那么我們可以如下進行.

//首先對xml對象進行判斷
checkXMLDocObj????=function(xmlFile)
{
????varxmlDoc????=loadXML(xmlFile);
????if(xmlDoc==null)
????{
????????alert('您的瀏覽器不支持xml文件讀取,于是本頁面禁止您的操作,推薦使用IE5.0以上可以解決此問題!');
????????window.location.href='/Index.aspx';
????}
????
????returnxmlDoc;
}

//然后開始獲取需要的Login/Weapon/W的第一個節點的屬性值
varxmlDoc????=checkXMLDocObj('/EBS/XML/Login.xml');
varv????=xmlDoc.getElementsByTagName('Login/Weapon/W')[0].childNodes.getAttribute('Text')


而我在我的程序中的寫法是這樣子的,當然我在程序中的寫法是已經應用到實際中的了.一并給出來,以供查看

initializeSelect????=function(oid,?xPath)
{
????varxmlDoc????=checkXMLDocObj('/EBS/XML/Login.xml');
????varn;
????varl;
????vare????=$(oid);
????if(e!=null)
????{
????????n????=xmlDoc.getElementsByTagName(xPath)[0].childNodes;
????????l????=n.length;
????????for(vari=0;?i<l;?i++)
????????{
????????????varoption????=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!

轉載于:https://www.cnblogs.com/douqiumiao/p/3165306.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259637.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259637.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259637.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java(Android)線程池

1、new Thread的弊端執行一個異步任務你還只是如下new Thread嗎&#xff1f; [java] view plaincopy new Thread(new Runnable() { Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了&#xff0c;n…

JQuery鏈式操作簡單的菜單列表

看到這個簡單的菜單demo&#xff0c;也是為了再看看JQuery對DOM的操作&#xff0c;一直都記不牢&#xff0c;特別是siblings&#xff08;&#xff09;這個總是想不起來。 這次再過一遍JQuery&#xff0c;不管簡單的還是復雜的demo 還是堅持練習一遍吧&#xff01;只為記錄&…

java 網絡編程實驗_Java網絡編程入門實驗一涉及點

1.http://www.cr173.com/html/20128_all.html 【wireshark怎么抓包、wireshark抓包詳細圖文教程】2.http://blog.csdn.net/huangjin0507/article/details/51678858 【HTTP協議1&#xff1a;工作原理】3.https://www.cnblogs.com/1666818961-lxj/p/7210021.html 【網絡常用端口號…

node.js async流程控制器--queue(隊列)

queue流程控制器是一個并行的流程控制器,但是它與parallel的區別在于queue可以控制一次執行幾個函數,而parallel只是讓所有函數并行執行. 例子如下: var q async.queue(function (obj,cb) {setTimeout(function () {console.log(obj);cb(); },obj.time) },1)for (var i 0; i&…

利用JS實現點擊上一周或下一周卻換

1.頁面加載顯示當前年份的第幾周 效果如圖&#xff1a; html代碼&#xff1a; <font size"2" color"black"> <input id"btnweek5" type"button" class"btn" value"上周" οnclick"EduCommissio…

centos7網卡編輯_CentOS7修改網卡為eth0

1.編輯網卡信息[rootlinux-node2~]#cd /etc/sysconfig/network-scripts/ #進入網卡目錄[rootlinux-node2network-scripts]# mv ifcfg-eno16777728 ifcfg-eth0 #重命名網卡名稱[rootlinux-node2 network-scripts]#cat ifcfg-eth0 #編輯網卡信息TYPEEthernetBOOTPROTOstaticDEFR…

C# 微支付退款申請接口 V3.3.6

/// <summary>/// 微支付退款申請/// </summary>/// <param name"context"></param>/// <param name"returnMsg"></param>/// <returns></returns>public bool Refund(HttpContext context, ref string r…

[轉] 英語、計算機、互聯網與全球化

http://davidzhao.blog.51cto.com/4548102/1225732 轉載于:https://www.cnblogs.com/wowk/p/3169638.html

APNIC IP 庫

http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest轉載于:https://www.cnblogs.com/dlwj/p/6388162.html

java reference 傳引用_Java的引用(reference)---Roni

摘自《Java面向對象編程》一書,作者:孫衛琴 來源:www.javathinker.org在JDK1.2以前的版本中&#xff0c;當一個對象不被任何變量引用&#xff0c;那么程序就無法再使用這個對象。也就是說&#xff0c;只有對象處于可觸及狀態&#xff0c;程序才能使用它。這就像在日常生活中&am…

C# 以管理員身份運行程序

剛看了一篇博友寫的“以管理員身份運行程序”, 所以我也來寫一個簡單易懂的&#xff0c;簡單兩步搞定&#xff0c;不用寫任何代碼&#xff1a; 第一步&#xff1a; 右鍵選擇項目 > 添加 > 新建項 &#xff1b; 找到 應用程序清單文件&#xff0c;后綴名為manifest&#x…

會計轉行從事IT,如何在一年時間內全職學習?

2019獨角獸企業重金招聘Python工程師標準>>> https://www.zhihu.com/question/21427478/answer/18227060 轉載于:https://my.oschina.net/soho00147/blog/836138

VS2010中使用CL快速 生成DLL的方法

方案一&#xff1a; 1、命令行中輸入cl example.cpp&#xff0c;生成example.obj和example.lib文件。有可能還會提示“沒有入口點”的錯誤。這是因為我們的CPP中是要生成dll文件的&#xff0c;并沒有main()這樣的主函數作為入口點。如果是C文件&#xff0c;則輸入cl /c exampl…

java field 獲得值_反射通用獲取字段值

像之前回答的那樣&#xff0c;您應該使用&#xff1a;Object value field.get(objectInstance);有時更喜歡的另一種方法是動態調用getter。示例代碼&#xff1a;public static Object runGetter(Field field, BaseValidationObject o){// MZ: Find the correct methodfor (Met…

android 中如何模擬back鍵

主要是在使用Fragment時能夠返回前一級&#xff0c;所以才找到了這些資料。 有兩種方式可以實現&#xff0c;直接上代碼 方法1&#xff1a; public void onBack(){new Thread(){public void run() {try{Instrumentation inst new Instrumentation();inst.sendKeyDownUpSync(Ke…

如何生成后綴表達式

如果計算一個表達式&#xff0c;比如 456*2&#xff0c;隨著計算器的不同&#xff0c;簡單的四功能計算器是30&#xff0c;許多科學計算器知道乘法的優先級高于加法&#xff0c;所以科學答案是21。典型計算順序可以是計算45&#xff0c;存為臨時變量a&#xff0c;再計算6*2&…

【原生JS插件】LoadingBar頁面頂部加載進度條

先展示一下已經實現的效果&#xff1a; 預覽地址&#xff1a;http://dtdxrk.github.io/js-plug/LoadingBar/index.html 看到手機上的瀏覽器內置了頁面的加載進度條&#xff0c;想用在pc上。 網上搜了一下&#xff0c;看到幾種頁面loading的方法&#xff1a; 1.在body頭部加入lo…

qtp啟動java程序_轉: QTP六脈神劍之調用Java程序

查看( 1147 ) /評論( 21 )六脈神劍之調用程序0Xp1zLN_0版權聲明&#xff1a;原創作品&#xff0c;轉載請以鏈接方式注明出自http://www.51testing.com/?35&#xff0c;否則將追究法律責任。51Testing軟件測試網y|X,taS51Testing軟件測試網b;|w6I"g6oK本文出自songfun的51…

Linq 數據庫操作(增刪改查)

Linq數據庫增刪改查 Linq是一種查詢語言&#xff0c;集成包含在formwork中&#xff0c;包含在C#語言中&#xff0c;它的作用是降低查詢的門檻&#xff0c;提高開發效率&#xff0c;是我們必須掌握的技術之一&#xff0c;下面是我自己對linq數據庫操作的方法&#xff0c;與大家…

第八章 Python 對象和類

一、什么是對象 在 Pyth 中&#xff0c;對象就是經過實例化的&#xff0c;具體可以操作的一組代碼的組合&#xff1b; 對象一般包含數據&#xff08;變量&#xff0c;更習慣稱之為屬性 attribute&#xff09;&#xff0c;也包含代碼&#xff08;函數&#xff0c;也稱之為方法&a…