jQuery 行级解析读取XML文件(附源码)


Posted in Javascript onOctober 12, 2009

最近在做一个项目,因为页面使用了Cookie,所以要判断用户的浏览器是否支持Cookie,并提示用户如何开启浏览器的Cookie功能。同时,整个项目要配置多语言支持,包括中文、越南语、日语和英语,所以必须有语言配置文件。项目中应用jQuery解析读取XML语言配置文件来实现语言的调度。这是jQuery解析读取XML文件功能的测试源码,现拿出来分享。
目录结构:

jQuery 行级解析读取XML文件(附源码)
main.css文件代码:

@CHARSET "UTF-8"; 
* { 
margin: 0px; 
padding: 0px; 
} 
body { 
width: 800px; 
text-align: left; 
font-size:62.5%; 
font: normal 0.75em tahoma, helvetica, sans-serif; 
} 
#Message_error { 
height:16px; 
color:#000; 
line-height:16px; 
background:#fcc url(image/msg_error.png) no-repeat; 
margin-bottom:2px; 
border-bottom:#faa 1px solid; 
padding-left:20px; 
overflow:hidden; 
display:none; 
} 
#Message_success { 
height:16px; 
line-height:16px; 
color:#000; 
background:#cfc url(image/msg_success.png) no-repeat; 
margin-bottom:2px; 
border-bottom:#afa 1px solid; 
padding-left:20px; 
overflow:hidden; 
display:none; 
}

index.html文件代码:
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>jQuery行级读取XML文件</title> 
<link rel="stylesheet" href="main.css" href="main.css" type="text/css"/> 
<script type="text/javascript" src="jquery-1.3.2.js"></script> 
<script type="text/javascript" src="browser.js" ><script> 
</head> 
<body> 
<div id="Message_success"></div> 
<div id="Message_error"></div> 
</body> 
</html>

MsgConfig_zh.xml文件代码:
<?xml version="1.0" encoding="utf-8"?> 
<Msg-Config> 
<msg id="1" name="cookie-support"> 
<message>你的浏览器不支持Cookie,请开启浏览器的Cookie功能</message> 
<message-help>点击查看开启Cookie方法</message-help> 
<message-url>index.html</message-url> 
</msg> <msg id="2" name="load-xml"> 
<message>jQuery读取节点XML成功</message> 
</msg> 
</Msg-Config>

browser.js文件代码:
$(document).ready(function() { 
/* Check the browser if open Cookie support. 
* ----------------------------------------------------- */ 
//navigator.cookieEnabled == true意为浏览器支持Cookie功能 
//navigator.cookieEnabled == false时指浏览器没有开启Cookie功能 
//因为我的浏览器已经开启了Cookie功能,此处设为true是为了检测效果 
if(navigator.cookieEnabled == true){ 
$.ajax({ 
url:"MsgConfig_zh.xml", //XML文件相对路径 
type:"POST", //发送请求的方式 
dataType:"xml", //指明文件类型为“xml” 
timeout:1000, //超时设置,单位为毫秒 
error:function(xml){ //解析XML文件错误时的处理 
$("#Message_error").text("Error loading XML document (加载XML文件出错)"+xml); 
$("#Message_error").show(); 
}, 
success:function(xml){ 
//遍历Msg-Config,查找节点“msg”并且节点id=1的节点 
$(xml).find("Msg-Config>msg[id=1]").each(function(){ 
var Msg_value = $(this).find("message").text(); //获取子节点message的值 
var Msg_help = $(this).find("message-help").text(); //获取子节点message-help的值 
var Msg_url = $(this).find("message-url").text(); //获取子节点message-url的值 
//将获取的值经过组合以.html()方式添加到页面的层Message_error中 
//这里是用.html()方式,它会处理文本中的html代码 
//如果是用.text()方式,则会将诸如<a><font color>等HTML代码原封不动的输出到页面 
$("#Message_error").html(Msg_value+"    <font color='blue'><b><a href=""+Msg_url+"" href=""+Msg_url+"">"+Msg_help+"</a></b></font>"); 
//层Message_error本来是隐藏的,添加值之后使其显示 
$("#Message_error").show(); 
}); //遍历Msg-Config,查找节点“msg”并且节点id=2的节点 
$(xml).find("Msg-Config>msg[id=2]").each(function(){ 
var Msg_value = $(this).find("message").text(); //获取子节点message的值 
$("#Message_success").html(Msg_value); //将获取的值以.html()方式添加到页面的层Message_error中 
$("#Message_success").show(); 
}); 
} 
}); 
} 
});

最终结果展示:

jQuery 行级解析读取XML文件(附源码)
多余的就不用多说了,代码里标注了很详细的注释。

但在测试的过程中,我也遇到了一两个问题。首先XML文件的编码格式必须是UTF-8,即要保证<?xml version="1.0" encoding="utf-8"?>,否则就会出现乱码。因为jQuery的Ajax传输数据是用的UTF-8编码的。

其二,是关于JS文件的编码问题。按道理,JS文件中是不应该出现中文的。在测试中我加入了对中文的测试,如代码片段$("#Message_error").text("Error loading XML document (加载XML文件出错)"+xml); ,指在不能正确解析或找不到XML文件时的错误信息提示,在测试的时候就发现“加载XML文件出错”这几个汉字老显示是乱码。弄了好久才知道是JS文件本身编码的问题,在网上查了半天,也没有人明确地说明解决方法,即使有,也没有解决乱码的根本,况且大多数人都是在胡说八道,一个帖子转来转去,自己都没有测试过就拿出来害人。最后,我摸索了一个多小时,终于解决了JS文件编码问题,随之也解决了jQuery.html()函数和jQuery.text()函数在传输中文时的乱码问题。

关于jQuery.html()函数和jQuery.text()函数在传输中文时的乱码问题解决请关注我的另外一篇文章《JS文件本身编码转换》
文件打包下载

Javascript 相关文章推荐
比Jquery的document.ready更快的方法
Apr 28 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
JQuery 使用attr方法实现下拉列表选中
Oct 13 Javascript
JavaScript数组迭代器实例分析
Jun 09 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
May 07 Javascript
原生JS实现的放大镜效果实例代码
Oct 15 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
Vue前后端不同端口的实现方法
Sep 19 Javascript
JavaScript函数IIFE使用详解
Oct 21 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 Javascript
jquery select选中的一个小问题
Oct 11 #Javascript
Jquery 表单取值赋值的一些基本操作
Oct 11 #Javascript
jquery 框架使用教程 AJAX篇
Oct 11 #Javascript
jQuery live( type, fn ) 委派事件实现
Oct 11 #Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
Oct 11 #Javascript
JS模拟的QQ面板上的多级可展开的菜单
Oct 10 #Javascript
js css样式操作代码(批量操作)
Oct 09 #Javascript
You might like
附件名前加网站名
2008/03/23 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
Angular.js中数组操作的方法教程
2017/07/31 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python抓取网页内容示例分享
2014/02/24 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
python Shapely使用指南详解
2020/02/18 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
历史学专业毕业生求职信
2013/09/27 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
社区结对共建协议书
2016/03/23 职场文书
js不常见操作运算符总结
2021/11/20 Javascript