Проблемы в разборе XML, когда один и тот же элемент существует в разных нс, используя jquery
Содержимое XML:
<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Some Title.</title>
<description>Pipes Output</description>
<link>http://pipes.yahoo.com/pipes/pipe.info</link>
<atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run"/>
<pubDate>Fri, 17 Aug 2012 07:25:28 +0000</pubDate>
<generator>http://pipes.yahoo.com/pipes</generator>
<item>
<title>Title 1</title>
<link>http://feedproxy.google.com</link>
<description>there is no description for this</description>
<guid isPermaLink="false">http://wordpress.com</guid>
<pubDate>Thu, 16 Aug 2012 16:47:41 +0000</pubDate>
<media:content medium="image" url="">
<media:title type="html">some media</media:title>
</media:content>
<media:content medium="image" url="">
<media:title type="html">Image</media:title>
</media:content>
<media:content medium="image" url="">
<media:title type="html">Image</media:title>
</media:content>
<media:content medium="image" url="">
<media:title type="html">Image</media:title>
</media:content>
<category>News</category>
</item>
<item>
<title>title 3</title>
<link>http://google.com</link>
<description>some description</description>
<author>Self</author>
<guid isPermaLink="false"></guid>
<pubDate>Wed, 15 Aug 2012 17:43:32 +0000</pubDate>
<enclosure type=""/>
</item>
</channel>
</rss>
Как отмечается, некоторые предметы имеют <media:content>
элемент, а некоторые не имеют
Jquery для разбора XML выглядит следующим образом:
function loadNews()
{
var entries = [];
var selectedEntry = "";
$loadMore = $('#btn_loadmore');
$loadMore.hide();
var RSS = "news.xml";
//$.get(RSS, {}, function(res, code) {
$.ajax(
{
type: "POST",
url: "news.xml",
dataType: "xml",
async: false,
success: function(res){
var xml = $(res);
var items = xml.find("item");
$.each(items, function(i, v) {
entry = {
title:$(v).find("\\:title, title").text(),
link:$(v).find("link").text().replace(/\/+$/, ""),
description:$.trim($(v).find("description").text())
};
entries.push(entry);
});
var s = '';
for(i=0;i<10;i++)
{
console.log(i + "--------------------------");
if(i>=entries.length)
break;
alert(entries[i].title);
console.log(entries[i].description);
console.log(entries[i].link);
}
}
});
}
Эта проблема:
В Firefox приведенный выше код работает нормально. Однако в сафари текст внутри тегов медиа также добавляется в заголовок
вывод в firefox: Title 1
вывод в сафари: Title 1some mediaImageImageImage
РЕДАКТИРОВАТЬ: как сказать селектору не выбирать <media:title>
но только <title>
Я прошел этот пост, но ничего не помогло.
Что мне не хватает?
* Я использую jquery 1.7.1, проблема ** такая же с jquery 1.6.****
1 ответ
Решение
Используемый find('[nodeName="title"]').text()
вместо find("\\:title, title").text()
Но это работает с jquery 1.6, я хочу добиться того же с jquery 1.7.1