我正在使用jquery构建我网站的RSS源,并且link元素一直空白。我自己构建的javascript解决方案没有问题,但jquery似乎讨厌链接元素。
下面是jquery代码:
function loadData(xml, ifid) {
var htmlStr;
var iframeToWrite = document.getElementById(ifid);
htmlStr = "<html><body>"
var items = $(xml).find("channel item").each(function () {
var $article = $(this);
var title = $article.find("title").text();
var description = $article.find("description").text();
var link = $article.find("link").text();
var pubDate = $article.find("pubDate").text();
htmlStr += "<div class='Rssitem'>\n";
htmlStr += "\t<h3><a href='" + link + "' target='_blank' >" +
title + "</a></h3>\n";
htmlStr += "\t<p>" + description + "</p>\n";
htmlStr += "\t<h6>" + pubDate + "</h6>\n";
htmlStr += "</div>\n"
});
htmlStr += "</body></hmtl>";
iframeToWrite.contentDocument.write(htmlStr);
}
下面是我从npr流编辑的xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:npr="http://www.npr.org/rss/" xmlns:nprml="http://api.npr.org/nprml" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<title>News</title>
<link>http://www.npr.org/templates/story/story.php?storyId=1001&ft=1&f=1001</link>
<description>NPR news, audio, and podcasts. Coverage of breaking stories, national and world news, politics, business, science, technology, and extended coverage of major national and world events.</description>
<language>en</language>
<copyright>Copyright 2012 NPR - For Personal Use Only</copyright>
<generator>NPR API RSS Generator 0.94</generator>
<lastBuildDate>Tue, 28 Aug 2012 12:19:00 -0400</lastBuildDate>
<image>
<url>http://media.npr.org/images/npr_news_123x20.gif</url>
<title>News</title>
<link>http://www.npr.org/templates/story/story.php?storyId=1001&ft=1&f=1001</link>
</image>
<item>
<title>Reports: Obama Administration Will Unveil New Fuel-Efficiency Standards</title>
<description>The new rules will require U.S. cars to average 54.5 miles per gallon by 2025.</description>
<pubDate>Tue, 28 Aug 2012 12:19:00 -0400</pubDate>
<link>http://www.npr.org/blogs/thetwo-way/2012/08/28/160172356/reports-obama-administration-will-unveil-new-fuel-efficiency-standards?ft=1&f=1001</link>
<guid>http://www.npr.org/blogs/thetwo-way/2012/08/28/160172356/reports-obama-administration-will-unveil-new-fuel-efficiency-standards?ft=1&f=1001</guid>
<content:encoded><![CDATA[<p>The new rules will require U.S. cars to average 54.5 miles per gallon by 2025.</p><p><a href="http://www.npr.org/templates/email/emailAFriend.php?storyId=160172356">» E-Mail This</a> <a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.npr.org%2Ftemplates%2Fstory%2Fstory.php%3FstoryId%3D160172356">» Add to Del.icio.us</a></p>]]></content:encoded>
</item>
</channel>
</rss>
答案 0 :(得分:3)
您必须先将xml字符串解析为xml文档jQuery.parseXML() 引用文档:
jQuery.parseXML使用浏览器的本机解析功能 创建有效的XML文档。然后可以将此文档传递给 jQuery创建一个可以遍历的典型jQuery对象 操纵。
如果你不使用parseXML并在其周围包装一个jQuery选择器,jQuery可能无法正确地插入所有节点。
在您的示例中,<link>
标记未正确处理,并且</link>
结束标记已被删除而未进行解析,因此您无法正确查询链接文本。
如果执行console.log($(this))
并检查控制台输出中的内容,则可以确认。您可以看到<link>
然后发送文字,但缺少结束</link>
。
但是,当您首先将xml解析为文档对象时,您现在可以在其周围包装jQuery选择器并可靠地访问所有节点。当然,假设初始XML字符串是有效的XML。
将此代码应用于您的代码将类似于:
htmlStr = "<html><body>";
// Parse the XML to a document object and then wrap it into a jQuery selector
var $xml = $($.parseXML(xml));
var items = $xml.find("channel item").each(function() {
var $article = $(this);
//..... rest of your code as is