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 相关文章推荐
理解Javascript_05_原型继承原理
Oct 13 Javascript
基于jquery的无缝循环新闻列表插件
Mar 07 Javascript
innerText和textContent对比及使用介绍
Feb 27 Javascript
Javascript冒泡排序算法详解
Dec 03 Javascript
JS简单编号生成器实现方法(附demo源码下载)
Apr 05 Javascript
Bootstrap学习笔记之css样式设计(1)
Jun 07 Javascript
如何提高javascript加载速度
Dec 26 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
Jul 12 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
Vue实现拖放排序功能的实例代码
Jul 08 Javascript
vue中的循环对象属性和属性值用法
Sep 04 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
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
php字符串操作常见问题小结
2016/10/11 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python实现结构体代码实例
2020/02/10 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
英国网上超市:Ocado
2020/03/05 全球购物
UNIX文件类型
2013/08/29 面试题
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
2014年民警工作总结
2014/11/25 职场文书
发票退票证明
2015/06/24 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript