jquery解析xml和按元素值
问题描述:
我有我使用jquery解析的以下xml。jquery解析xml和按元素值
但是我坚持只显示按标题分组的城市和日期。 我如何解析XML使最终输出会是这样
测试赛1 - 奥斯陆(2011/08/11),达拉斯(2011/11/11)
测试赛2 - 新纽约(...),西雅图(...)
任何帮助,将不胜感激,
感谢, 特里
<root>
<item guid="np_108886">
<title>Test event 1</title>
<description>lorem ipsum</description>
<specfields>
<city>oslo</city>
<startdate>2011/08/11</startdate>
</specfields>
</item>
<item guid="np_108886">
<title>Test event 1</title>
<description>lorem ipsum</description>
<specfields>
<city>dallas</city>
<startdate>2011/11/11</startdate>
</specfields>
</item>
<item guid="np_108886">
<title>Test event 2</title>
<description>lorem ipsum</description>
<specfields>
<city>new york</city>
<startdate>2011/09/11</startdate>
</specfields>
</item>
<item guid="np_108886">
<title>Test event 2</title>
<description>lorem ipsum</description>
<specfields>
<city>seattle</city>
<startdate>2011/09/11</startdate>
</specfields>
</item>
</root>
答
http://jsfiddle.net/XnmNU/6/ - 工作jFiddle
我的版本进行比较逆水previouse标题,如果其decern愚弄的人或没有,对不起,我做的{编辑子选择!}没有时间绝对优化我在工作中的代码:(
输出> 开始 测试事件1 - 奥斯陆(2011/08/11) 达拉斯(2011/11/11) 测试事件2 - 纽约(2011/09/11) 西雅图(2011/09/11)
$("document").ready(function(){
var xml = "<root> <item guid='np_108886'> <title>Test event 1</title> <description>lorem ipsum</description> <specfields> <city>oslo</city> <startdate>2011/08/11</startdate> </specfields> </item> <item guid='np_108886'> <title>Test event 1</title> <description>lorem ipsum</description> <specfields> <city>dallas</city> <startdate>2011/11/11</startdate> </specfields> </item> <item guid='np_108886'> <title>Test event 2</title> <description>lorem ipsum</description> <specfields> <city>new york</city> <startdate>2011/09/11</startdate> </specfields> </item> <item guid='np_108886'> <title>Test event 2</title> <description>lorem ipsum</description> <specfields> <city>seattle</city> <startdate>2011/09/11</startdate> </specfields> </item> </root>", xmlDoc = $.parseXML(xml); xml = $(xmlDoc);
try
{
$(xml).find('[nodeName=item]').each(function(){ if ($(this).index() != 0) {
possitionTitle = $(this).prev();
if ($(this).children('title').text() != possitionTitle.children('title').text()) {
$("div").append("</li><li>"+$(this).children('title').text()+" -- "+$(this).children("specfields").children("city").text()+" ("+$(this).children("specfields").children("startdate").text()+")");
} else {
$("div").append($(this).children("specfields").children("city").text()+" ("+$(this).children("specfields").children("startdate").text()+")");
}
} else {
$("div").append("Start<li>"+$(this).children('title').text()+" -- "+$(this).children("specfields").children("city").text()+" ("+$(this).children("specfields").children("startdate").text()+")");
}
$("div").append("</li>");
});
}
catch(err)
{
alert(err);
}
});
<div></div>
答
像这样的事情寿LD工作(未经测试):
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "YOUR XML",
dataType: "xml",
success: parseXml
});
});
function parseXml(xml){
$(xml).find("title").filter(function(){
$(this).text() == "Test event 1";
}).each(function(){
$("#dataDiv").append($(this).find("city").text();
$("#dataDiv").append("(" + $(this).find("startdate").text() + "),");
});
$(xml).find("title").filter(function(){
$(this).text() == "Test event 2";
}).each(function(){
$("#dataDiv").append($(this).find("city").text();
$("#dataDiv").append("(" + $(this).find("startdate").text() + "),");
});
}
其中#dataDiv
和#dataDiv2
在页面上的div只是测试赛1或测试赛2在他们里面。
答
希望这会有所帮助。我已经测试并创建了一个js小提琴:http://jsfiddle.net/xDqZK/
基本上,一旦您在javscript中有xml,您可以使用jquerys parseXML()函数将其获取到jquery对象中。一旦进入对象,您可以使用$ .find()方法搜索不同的节点并在它们之间迭代。一个棘手的事情,如果你想获得节点的价值,你需要使用.text()。我正在使用.val()和.hmtl(),它返回undefined。
var strXml ="<root><item guid=\"np_108886\"><title>Test event 1<\/title><description>lorem ipsum<\/description><specfields><city>oslo<\/city><startdate>2011\/08\/11<\/startdate><\/specfields><\/item><item guid=\"np_108886\"><title>Test event 1<\/title><description>lorem ipsum<\/description><specfields><city>dallas<\/city><startdate>2011\/11\/11<\/startdate><\/specfields><\/item><item guid=\"np_108886\"><title>Test event 2<\/title><description>lorem ipsum<\/description><specfields><city>new york<\/city><startdate>2011\/09\/11<\/startdate><\/specfields><\/item><item guid=\"np_108886\"><title>Test event 2<\/title><description>lorem ipsum<\/description><specfields><city>seattle<\/city><startdate>2011\/09\/11<\/startdate><\/specfields><\/item><\/root>";
var xml = $.parseXML(strXml);
$("#test").html((parse(xml,"Test event 1")));
function parse(xml, strEvent)
{
var eventStr = "",$xml = $(xml);
$xml.find("item").each(function(){
if($(this).find("title").text().toLowerCase() == strEvent.toLowerCase()){
var childNode = $(this).find("specfields")
eventStr += childNode.find("city").text();
eventStr += " (" + childNode.find("startdate").text() + ") ";
}
});
return eventStr;
}
HTML
<div id="test></div>
谢谢寻求帮助,像魅力一样工作。我知道我必须检查标题,但无法得到我的头在.prev()... –
@ Terr Marder:让我猜测一个学校项目?:P – John
nope,在明天截止日期之前快速的最后一分钟的项目变更。那些我们都非常喜欢的...... ;-) –