JQUERY解析XML,并返回html
现有xml如下,需要通过jquery解析,将结果返回网页的列表中,请大神帮助。<?xmlversion="1.0"encoding="UTF-8"?><viewentri...
现有xml如下,需要通过jquery解析,将结果返回网页的列表中,请大神帮助。
<?xml version="1.0" encoding="UTF-8" ?>
<viewentries timestamp="20131031T073059,37Z" toplevelentries="10">
<viewentry position="1" unid="37E02C9C442D762748257BEE0010B125" noteid="43CA" siblings="10">
<entrydata columnnumber="0" name="姓名">
<text>张三</text>
</entrydata>
<entrydata columnnumber="1" name="性别">
<text>男</text>
</entrydata>
<entrydata columnnumber="1" name="年龄">
<text>20</text>
</entrydata>
</viewentry>
<viewentry position="2" unid="904427D97F5CC90348257BEE0010F06E" noteid="43CE" siblings="10">
<entrydata columnnumber="0" name="姓名">
<text>李四</text>
</entrydata>
<entrydata columnnumber="1" name="性别">
<text>男</text>
</entrydata>
<entrydata columnnumber="1" name="年龄">
<text>30</text>
</entrydata>
</viewentry>
...
此处省略多个重复节点
...
<viewentry position="8" unid="77C6137141FD6D9C48257BEA001D8153" noteid="4262" siblings="10">
<entrydata columnnumber="0" name="姓名">
<text>王五</text>
</entrydata>
<entrydata columnnumber="1" name="性别">
<text>男</text>
</entrydata>
<entrydata columnnumber="1" name="年龄">
<text>25</text>
</entrydata>
</viewentry>
</viewentries>
要求返回格式为:
<tr>
<td>张三</td><td>男</td><td>20</td>
</tr>
<tr>
<td>李四</td><td>男</td><td>30</td>
</tr>
......
<tr>
<td>王五</td><td>男</td><td>25</td>
</tr> 展开
<?xml version="1.0" encoding="UTF-8" ?>
<viewentries timestamp="20131031T073059,37Z" toplevelentries="10">
<viewentry position="1" unid="37E02C9C442D762748257BEE0010B125" noteid="43CA" siblings="10">
<entrydata columnnumber="0" name="姓名">
<text>张三</text>
</entrydata>
<entrydata columnnumber="1" name="性别">
<text>男</text>
</entrydata>
<entrydata columnnumber="1" name="年龄">
<text>20</text>
</entrydata>
</viewentry>
<viewentry position="2" unid="904427D97F5CC90348257BEE0010F06E" noteid="43CE" siblings="10">
<entrydata columnnumber="0" name="姓名">
<text>李四</text>
</entrydata>
<entrydata columnnumber="1" name="性别">
<text>男</text>
</entrydata>
<entrydata columnnumber="1" name="年龄">
<text>30</text>
</entrydata>
</viewentry>
...
此处省略多个重复节点
...
<viewentry position="8" unid="77C6137141FD6D9C48257BEA001D8153" noteid="4262" siblings="10">
<entrydata columnnumber="0" name="姓名">
<text>王五</text>
</entrydata>
<entrydata columnnumber="1" name="性别">
<text>男</text>
</entrydata>
<entrydata columnnumber="1" name="年龄">
<text>25</text>
</entrydata>
</viewentry>
</viewentries>
要求返回格式为:
<tr>
<td>张三</td><td>男</td><td>20</td>
</tr>
<tr>
<td>李四</td><td>男</td><td>30</td>
</tr>
......
<tr>
<td>王五</td><td>男</td><td>25</td>
</tr> 展开
展开全部
你好!!
这个问题的重点在解析xml的元素上······
给出两种解决方式,代码如下:
<button id="btn">加载数据</button>
<table id="tbl" width="60%" border="1">
<thead>
<tr>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
</thead>
</table>
-----------------------------------------------------------
<script>
$(document).ready(function() {
$("#btn").click(function() {
//假设你的请求为demo.xml
$.ajax({
url: "demo.xml",
dataType: "xml",
cache: false,
success: function(data) {
//请求成功后清空tbody中的内容
$("#tbl tbody").empty();
// 第一种方式,利用jquery对象
$(data).find("viewentry").each(function() {
var $tr = $("<tr><td></td><td></td><td></td></tr>");
var entry = $(this);
entry.find("entrydata").find("text").each(function(index,ele) {
$tr.find("td:eq(" + index + ")").text($(ele).text());
});
$("#tbl").append($tr);
});
// 第二种方式,利用tmpl模板
//这种方式需要引入一个jquery.tmpl.min.js文件
var markup = "<tr><td>${$data.eq(0).text()}</td><td>${$data.eq(1).text()}</td><td>${$data.eq(2).text()}</td></tr>";
// 给markup这个模板起个名字叫yourTemplate并编译
$.template("yourTemplate", markup);
$(data).find("viewentry").each(function() {
//这里是使用编译好的模板,并为其指定数据,最后追加至table
$.tmpl("yourTemplate", $(this).find("entrydata >text")).appendTo($("#tbl"));
});
}
});
});
});
</script>
还有不明白的地方可以追问····
希望对你有帮助!!
更多追问追答
追问
非常感谢你的回答,我已经按照你说的测试了,完全OK,不过还有三个问题,我可以再追加财富值,希望你不吝赐教,谢谢先!
1、如果我不是完全获取所有xml数据,即:xml中有姓名、性别、年龄,但是我只想获取姓名、年龄,该如何实现呢?
2、如果数据量较大,如果加入分页呢?
3、xml中的unid、noteid又该如何获取呢?
追答
上午好!
只想获取姓名、年龄的,可以根据元素entrydata的属性值来访问,这里用到了jQuery中的属性选择器;
$(data).find("viewentry").each(function() {
var $tr = $("<tr><td></td><td></td></tr>");
var entry = $(this);
//这里使用了属性选择器
//也可以使用这种写法来替代entrydata[name!='性别'](意为属性name!='性别'的元素)
entry.find("entrydata[name='姓名'],entrydata[name='年龄']").find("text").each(function(index,ele) {
$tr.find("td:eq(" + index + ")").text($(ele).text());
});
var $tr2 = $("<tr><td colspan='2'></td></tr>");
$tr2.find("td").text( "unid:" + entry.attr("unid") + "-----noteid:" + entry.attr("noteid") );
$("#tbl").append($tr).append($tr2);
});
2. 如果数据量大,加入分页。这个分页有两种方式:一种是在服务端做,一种是在客户端。
服务端做的好处就是每次请求返回的数据量较小,但是这种请求需要多次发出,比如第一页是一个请求,第二页又是一个请求,因为你的每次请求会附带参数,最起码得有个页号对吧,不然服务器无法根据你的请求返回对应的数据。
客户端做的好处是不需要频繁的访问服务器了,当然前提是一次性将所有数据加载过来,这样做分页的速度比较快,而且可以节省服务器资源,但是一次性加载大量数据同样带来不小的牺牲。
具体的分页代码就不贴了,度娘和谷哥一下,会有惊喜的·····
展开全部
var xml="那个xml字符串";
var table=$("那个table的选择器");
$(xml).find("viewentry").each(function(){
var tr=$("<tr>");
$(this).find("entrydata").each(function(){
tr.append("<td>"+$(this).child("text").text+"</td>");
});
table.append(tr);
});
我没有测试过,不过大概是这么个思路
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询