Jquery 解析XML 成数组的问题

Suu丶 2016-07-27 06:09:43
最近做一个功能,需要用到XML 于是开始搞了

功能是这样的,当网页开始加载的时候通过ajaxget到xml文件,并解析Xml 把里面的数据拿出来,添加到div上

先奉上XML
<?xml version="1.0" encoding="utf-8"?>

<messages>
<box userid="123123123123123">
<content>阿什顿</content>
<author>飞快地疾驰</author>
<picurl>./img/head_pic/7.jpg</picurl>
<time>2016-7-25 11:26:30</time>
</box>
<box userid="43859749879832492">
<content>山东</content>
<author>强扭的瓜不甜</author>
<picurl>./img/head_pic/3.jpg</picurl>
<time>2016-7-25 11:26:44</time>
</box>
<box userid="1090238432848">
<content>按时</content>
<author>深深地伤害</author>
<picurl>./img/head_pic/9.jpg</picurl>
<time>2016-7-25 13:4:15</time>
</box>
</messages>


刚开始是实现了这个功能了.代码如下

function init(){
$.ajax({
url: 'comment.xml',
type: 'GET',
dataType: 'xml',
success:function(data){
$(data).find('box').each(function() {
var back_content = $(this).find('content').text();
var back_username = $(this).find('author').text();
var back_pic_url = $(this).find('picurl').text();
var back_time = $(this).find('time').text();
var disparity = GetDateDiff(back_time,get_postTime());
//console.info(back_content+back_username+back_pic_url+back_time);
$("#chatbox").append('<li class="chat_detail"><div class="user_pic"><img src="'+back_pic_url+'"


可是后来发现个问题,在JQ中,获取的值都算是一种死值,都是自己手动添加上去的,如果换了XML里的标签名称的话,JQ里面也要跟着换,这样会很麻烦,于是就想着用JQuery动态的获取XML的标签名,然后动态输出这些值,

刚开始写,直接创建 XMLHttpRequest 对象的话 ,可以直接读出来第一个标签的值,(XML文件在最后)
outermost_XML_Name = data.firstChild.nodeName;//获取到的最外层的节点的名称

然后同样的方法继续向下找却找不到下一层的名字,提示
index.js:60 Uncaught TypeError: Cannot read property 'nodeName' of undefined
试了好几种方法也没有获取到数据,就直接写了XML的标签名进去了,这样倒是OK,可是不是我想要...放弃了这个方法,用JQ的 each来遍历这个XML成数组 在网上找了找相应的功能代码,并没有详细记载的.大部分还是以手动添加的标签名为主

后来通过each把第一层获取到了,只是一个messages这一层,然并卵,果断放弃了这个念头,问同事说用递归来遍历这些标签名,思索了一下,不知道从何下手,请广大码友帮帮忙,想想该怎么写
...全文
1151 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Suu丶 2017-05-31
  • 打赏
  • 举报
回复
引用 楼主 qq_21961903 的回复:
最近做一个功能,需要用到XML 于是开始搞了 功能是这样的,当网页开始加载的时候通过ajaxget到xml文件,并解析Xml 把里面的数据拿出来,添加到div上 先奉上XML
<?xml version="1.0" encoding="utf-8"?>

<messages> 
  <box userid="123123123123123">
    <content>阿什顿</content>
    <author>飞快地疾驰</author>
    <picurl>./img/head_pic/7.jpg</picurl>
    <time>2016-7-25 11:26:30</time>
  </box>
  <box userid="43859749879832492">
    <content>山东</content>
    <author>强扭的瓜不甜</author>
    <picurl>./img/head_pic/3.jpg</picurl>
    <time>2016-7-25 11:26:44</time>
  </box>
  <box userid="1090238432848">
    <content>按时</content>
    <author>深深地伤害</author>
    <picurl>./img/head_pic/9.jpg</picurl>
    <time>2016-7-25 13:4:15</time>
  </box>
</messages>
刚开始是实现了这个功能了.代码如下
function init(){
		$.ajax({
		url: 'comment.xml',
		type: 'GET',
		dataType: 'xml',
		success:function(data){
			$(data).find('box').each(function() {
				var back_content = $(this).find('content').text();
				var back_username = $(this).find('author').text();
				var back_pic_url = $(this).find('picurl').text();
				var back_time = $(this).find('time').text();
				var disparity =  GetDateDiff(back_time,get_postTime());
				//console.info(back_content+back_username+back_pic_url+back_time);
				$("#chatbox").append('<li class="chat_detail"><div class="user_pic"><img src="'+back_pic_url+'"
可是后来发现个问题,在JQ中,获取的值都算是一种死值,都是自己手动添加上去的,如果换了XML里的标签名称的话,JQ里面也要跟着换,这样会很麻烦,于是就想着用JQuery动态的获取XML的标签名,然后动态输出这些值, 刚开始写,直接创建 XMLHttpRequest 对象的话 ,可以直接读出来第一个标签的值,(XML文件在最后)
outermost_XML_Name = data.firstChild.nodeName;//获取到的最外层的节点的名称
然后同样的方法继续向下找却找不到下一层的名字,提示
index.js:60 Uncaught TypeError: Cannot read property 'nodeName' of undefined
试了好几种方法也没有获取到数据,就直接写了XML的标签名进去了,这样倒是OK,可是不是我想要...放弃了这个方法,用JQ的 each来遍历这个XML成数组 在网上找了找相应的功能代码,并没有详细记载的.大部分还是以手动添加的标签名为主 后来通过each把第一层获取到了,只是一个messages这一层,然并卵,果断放弃了这个念头,问同事说用递归来遍历这些标签名,思索了一下,不知道从何下手,请广大码友帮帮忙,想想该怎么写
Suu丶 2016-07-27
  • 打赏
  • 举报
回复
引用 1 楼 slwsss 的回复:
参考
没理解这个 能解释解释吗
slwsss 2016-07-27
  • 打赏
  • 举报
回复

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧