MetaData.rssFromXml constructor

MetaData.rssFromXml(
  1. XmlDocument xmlDoc
)

Creates a new MetaData object from the XmlDocument

Implementation

factory MetaData.rssFromXml(XmlDocument xmlDoc) {
  final root = xmlDoc.rootElement;
  var version = root.getAttribute('version') ?? '';
  final encoding = root.getAttribute('encoding') ?? '';
  final namespaces = Namespaces(root.attributes);

  switch (root.localName) {
    case 'feed':
      if (version.isEmpty && namespaces.hasAtomDefault) {
        version = '1.0';
      }
      return MetaData(FeedKind.atom, version, namespaces, encoding: encoding);
    case 'rss':
      if (version == '0.91') {
        final docType = root.document?.doctypeElement;
        if ((docType != null) && (docType.externalId?.publicId == rss91n)) {
          version = '0.91n';
        } else {
          version = '0.91u';
        }
      }
      return MetaData(FeedKind.rss, version, namespaces, encoding: encoding);
    case 'RDF':
      return MetaData(FeedKind.rss, '0.90', namespaces, encoding: encoding);
    default:
      throw FeedError('Unknown feed type: ${root.localName}');
  }
}