@@ -8,6 +8,7 @@ import 'package:webfeed_revised/domain/rss_image.dart';
8
8
import 'package:webfeed_revised/domain/rss_item.dart' ;
9
9
import 'package:webfeed_revised/domain/syndication/syndication.dart' ;
10
10
import 'package:webfeed_revised/util/iterable.dart' ;
11
+ import 'package:webfeed_revised/util/xml.dart' ;
11
12
import 'package:xml/xml.dart' ;
12
13
13
14
/// Represents an RSS feed
@@ -40,7 +41,8 @@ class RssFeed {
40
41
});
41
42
42
43
/// Parse constructor for the RssFeed class, used when 'parsing' a feed
43
- factory RssFeed .parse (String xmlString) {
44
+ /// If [parseHtml] is true, HTML tags will be parsed from the feed
45
+ factory RssFeed .parse (String xmlString, [bool parseHtml = true ]) {
44
46
final document = XmlDocument .parse (xmlString);
45
47
final rss = document.findElements ('rss' ).firstOrNull;
46
48
final rdf = document.findElements ('rdf:RDF' ).firstOrNull;
@@ -52,17 +54,23 @@ class RssFeed {
52
54
throw ArgumentError ('channel not found' );
53
55
}
54
56
return RssFeed (
55
- title: channelElement.findElements ('title' ).firstOrNull? .text,
57
+ title: channelElement
58
+ .findElements ('title' )
59
+ .firstOrNull
60
+ ? .parseText (parseHtml),
56
61
author: channelElement.findElements ('author' ).firstOrNull? .text,
57
- description: channelElement.findElements ('description' ).firstOrNull? .text,
62
+ description: channelElement
63
+ .findElements ('description' )
64
+ .firstOrNull
65
+ ? .parseText (parseHtml),
58
66
link: channelElement.findElements ('link' ).firstOrNull? .text,
59
67
items: (rdf ?? channelElement)
60
68
.findElements ('item' )
61
- .map (RssItem .parse)
69
+ .map ((item) => RssItem .parse (item, parseHtml) )
62
70
.toList (),
63
71
image: (rdf ?? channelElement)
64
72
.findElements ('image' )
65
- .map (RssImage .parse)
73
+ .map ((image) => RssImage .parse (image, parseHtml) )
66
74
.firstOrNull,
67
75
cloud:
68
76
channelElement.findElements ('cloud' ).map (RssCloud .parse).firstOrNull,
@@ -97,8 +105,8 @@ class RssFeed {
97
105
ttl: int .tryParse (
98
106
channelElement.findElements ('ttl' ).firstOrNull? .text ?? '0' ,
99
107
),
100
- dc: DublinCore .parse (channelElement),
101
- itunes: Itunes .parse (channelElement),
108
+ dc: DublinCore .parse (channelElement, parseHtml ),
109
+ itunes: Itunes .parse (channelElement, parseHtml ),
102
110
syndication: Syndication .parse (channelElement),
103
111
);
104
112
}
0 commit comments