RssFeed.parse constructor
RssFeed.parse(
- String xmlString
Factory method to create an RssFeed
object from an XML string representing an RSS feed.
This method parses the xmlString
and extracts the relevant information from it
to create an RssFeed
object and returns it.
The extracted information includes the title, author, description, link, items, image, cloud, categories, skip days, skip hours, last build date, language, generator, copyright, docs, managing editor, rating, web master, time-to-live (ttl), Dublin Core metadata, iTunes metadata, syndication metadata, and podcast metadata.
Implementation
factory RssFeed.parse(String xmlString) {
var document = XmlDocument.parse(xmlString);
var rss = document.findElements('rss').firstOrNull;
var rdf = document.findElements('rdf:RDF').firstOrNull;
if (rss == null && rdf == null) {
throw ArgumentError('not a rss feed');
}
var channelElement = (rss ?? rdf)!.findElements('channel').firstOrNull;
if (channelElement == null) {
throw ArgumentError('channel not found');
}
return RssFeed(
title: channelElement.findElements('title').firstOrNull?.innerText,
author: channelElement.findElements('author').firstOrNull?.innerText,
description:
channelElement.findElements('description').firstOrNull?.innerText,
link: channelElement.findElements('link').firstOrNull?.innerText,
items: (rdf ?? channelElement)
.findElements('item')
.map((e) => RssItem.parse(e))
.toList(),
image: (rdf ?? channelElement)
.findElements('image')
.map((e) => RssImage.parse(e))
.firstOrNull,
cloud: channelElement
.findElements('cloud')
.map((e) => RssCloud.parse(e))
.firstOrNull,
categories: channelElement
.findElements('category')
.map((e) => RssCategory.parse(e))
.toList(),
skipDays: channelElement
.findElements('skipDays')
.firstOrNull
?.findAllElements('day')
.map((e) => e.innerText)
.toList() ??
[],
skipHours: channelElement
.findElements('skipHours')
.firstOrNull
?.findAllElements('hour')
.map((e) => int.tryParse(e.innerText) ?? 0)
.toList() ??
[],
lastBuildDate:
channelElement.findElements('lastBuildDate').firstOrNull?.innerText,
language: channelElement.findElements('language').firstOrNull?.innerText,
generator:
channelElement.findElements('generator').firstOrNull?.innerText,
copyright:
channelElement.findElements('copyright').firstOrNull?.innerText,
docs: channelElement.findElements('docs').firstOrNull?.innerText,
managingEditor:
channelElement.findElements('managingEditor').firstOrNull?.innerText,
rating: channelElement.findElements('rating').firstOrNull?.innerText,
webMaster:
channelElement.findElements('webMaster').firstOrNull?.innerText,
ttl: int.tryParse(
channelElement.findElements('ttl').firstOrNull?.innerText ?? '0'),
dc: DublinCore.parse(channelElement),
itunes: Itunes.parse(channelElement),
syndication: Syndication.parse(channelElement),
podcast: Podcast.parse(channelElement),
);
}