Meek
Meek

Reputation: 3362

Parse RSS <content:encoded> with native javaScript

I'm parsing a RSS feed which looks like this:

<?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&amp;ft=1&amp;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&amp;ft=1&amp;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&amp;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&amp;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">&raquo; E-Mail This</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.npr.org%2Ftemplates%2Fstory%2Fstory.php%3FstoryId%3D160172356">&raquo; Add to Del.icio.us</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>

I'm looping the items like this:

var channel = xml.documentElement.getElementsByTagName("channel");
var items = xml.documentElement.getElementsByTagName("item");

for (var i = 0; i < items.length; i++) {
  var ul = document.getElementById("feed");
  var li = document.createElement('li');
  var item = items.item(i);
  var title = item.getElementsByTagName("title").item(0).textContent;
  var link = item.getElementsByTagName("link").item(0).textContent;
  var description = item.getElementsByTagName("link").item(0).textContent;
  //var content = item.getElementsByTagName('content\\:encoded').item(0).textContent;

  var li = document.createElement('li');
  li.innerHTML = '<a href="' + link + '">' + title + '</a>';
  document.getElementById('feed').appendChild(li);
}

But how can I get the contents of the node <content:encoded>?

I tried with: item.getElementsByTagName('content\\:encoded').item(0).textContent; but it's not working.

Using jQuery this one inside .each() works: $(this).find('content\\:encoded').text(); but I'd rather use native javaScript.

Upvotes: 2

Views: 1460

Answers (2)

Fs-Gen
Fs-Gen

Reputation: 1

my solution:

var result2 = JSON.parse(result1);
setData(result2.rss.channel.item[0].["content:encoded"]);

jus use ["content:encoded"]

Upvotes: 0

Meek
Meek

Reputation: 3362

So, it seems that I needed to use the tag getElementsByTagNameNS and that the node was "encoded" - like this:

var content = item.getElementsByTagNameNS("*", "encoded").item(0).textContent;

Upvotes: 4

Related Questions