protected static bool TryParseRsdResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; XmlNamespaceManager manager = null; Guard.ArgumentNotNull(resource, "resource"); manager = new XmlNamespaceManager(resource.NameTable); manager.AddNamespace("rsd", "http://archipelago.phrasewise.com/rsd"); version = null; if ((navigator = resource.SelectSingleNode("rsd", manager)) != null || (navigator = resource.SelectSingleNode("rsd:rsd", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); if (namespaces.ContainsValue("http://archipelago.phrasewise.com/rsd")) { resourceConformsToFormat = true; if (version == null) { version = new Version(1, 0); } } else if (String.Compare(navigator.Name, "rsd", StringComparison.OrdinalIgnoreCase) == 0 && version != null) { // Most web log software actually fails to provide the default XML namespace per RSD spec, so this is a hack/compromise resourceConformsToFormat = true; } } return(resourceConformsToFormat); }
protected static bool TryParseOpenSearchDescriptionResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; XmlNamespaceManager manager = null; Guard.ArgumentNotNull(resource, "resource"); manager = new XmlNamespaceManager(resource.NameTable); manager.AddNamespace("search", "http://a9.com/-/spec/opensearch/1.1/"); version = null; if ((navigator = resource.SelectSingleNode("OpenSearchDescription", manager)) != null || (navigator = resource.SelectSingleNode("search:OpenSearchDescription", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); if (namespaces.ContainsValue("http://a9.com/-/spec/opensearch/1.1/")) { resourceConformsToFormat = true; if (version == null) { version = new Version(1, 1); } } } return(resourceConformsToFormat); }
protected static bool TryParseMicroSummaryGeneratorResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; XmlNamespaceManager manager = null; Guard.ArgumentNotNull(resource, "resource"); manager = new XmlNamespaceManager(resource.NameTable); manager.AddNamespace("micro", "http://www.mozilla.org/microsummaries/0.1"); version = null; if ((navigator = resource.SelectSingleNode("generator", manager)) != null || (navigator = resource.SelectSingleNode("micro:generator", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); if (namespaces.ContainsValue("http://www.mozilla.org/microsummaries/0.1")) { resourceConformsToFormat = true; if (version == null) { version = new Version(0, 1); } } } return(resourceConformsToFormat); }
protected static bool TryParseBlogMLResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; XmlNamespaceManager manager = null; Guard.ArgumentNotNull(resource, "resource"); manager = new XmlNamespaceManager(resource.NameTable); manager.AddNamespace("blogML", "http://www.blogml.com/2006/09/BlogML"); version = null; if ((navigator = resource.SelectSingleNode("blog", manager)) != null || (navigator = resource.SelectSingleNode("blogML:blog", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); if (namespaces.ContainsValue("http://www.blogml.com/2006/09/BlogML")) { resourceConformsToFormat = true; if (version == null) { version = new Version(2, 0); } } } return(resourceConformsToFormat); }
protected static bool TryParseAtomPublishingServiceResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; XmlNamespaceManager manager = null; Guard.ArgumentNotNull(resource, "resource"); manager = new XmlNamespaceManager(resource.NameTable); manager.AddNamespace("atom", "http://www.w3.org/2005/Atom"); manager.AddNamespace("atom03", "http://purl.org/atom/ns#"); manager.AddNamespace("app", "http://www.w3.org/2007/app"); version = null; if ((navigator = resource.SelectSingleNode("service", manager)) != null || (navigator = resource.SelectSingleNode("app:service", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); if (namespaces.ContainsValue("http://www.w3.org/2007/app")) { resourceConformsToFormat = true; if (version == null) { version = new Version(1, 0); } } } return(resourceConformsToFormat); }
protected static bool TryParseRssResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; XmlNamespaceManager manager = null; Guard.ArgumentNotNull(resource, "resource"); manager = new XmlNamespaceManager(resource.NameTable); manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); manager.AddNamespace("rss09", "http://my.netscape.com/rdf/simple/0.9/"); manager.AddNamespace("rss10", "http://purl.org/rss/1.0/"); version = null; if ((navigator = resource.SelectSingleNode("rss", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); resourceConformsToFormat = true; if (version == null) { version = new Version(2, 0); } } else if ((navigator = resource.SelectSingleNode("rdf:RDF", manager)) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); if (namespaces.ContainsValue("http://purl.org/rss/1.0/")) { resourceConformsToFormat = true; version = new Version(1, 0); } else if (namespaces.ContainsValue("http://my.netscape.com/rdf/simple/0.9/")) { resourceConformsToFormat = true; version = new Version(0, 9); } } return(resourceConformsToFormat); }
protected static bool TryParseOpmlResource(XPathNavigator resource, out XPathNavigator navigator, out Version version) { bool resourceConformsToFormat = false; Guard.ArgumentNotNull(resource, "resource"); version = null; if ((navigator = resource.SelectSingleNode("opml")) != null) { version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version"); resourceConformsToFormat = true; if (version == null) { version = new Version(2, 0); } } return(resourceConformsToFormat); }
/// <summary> /// Extracts the content format, version, and XML namespaces for a syndication resource from the supplied <see cref="XPathNavigator"/>. /// </summary> /// <param name="resource">The <see cref="XPathNavigator"/> to extract the syndication resource meta-data from.</param> /// <exception cref="ArgumentNullException">The <paramref name="resource"/> is a null reference (Nothing in Visual Basic).</exception> private void Load(XPathNavigator resource) { XPathNavigator navigator = null; Version version = null; Guard.ArgumentNotNull(resource, "resource"); Dictionary <string, string> namespaces = (Dictionary <string, string>)resource.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml); foreach (string prefix in namespaces.Keys) { resourceNamespaces.Add(prefix, namespaces[prefix]); } resourceVersion = SyndicationResourceMetadata.GetVersionFromAttribute(resource, "version"); if (SyndicationResourceMetadata.TryParseApmlResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.Apml; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseAtomResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.Atom; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseAtomPublishingCategoriesResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.AtomCategoryDocument; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseAtomPublishingServiceResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.AtomServiceDocument; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseBlogMLResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.BlogML; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseMicroSummaryGeneratorResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.MicroSummaryGenerator; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseNewsMLResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.NewsML; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseOpenSearchDescriptionResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.OpenSearchDescription; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseOpmlResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.Opml; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseRsdResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.Rsd; resourceRootNode = navigator; resourceVersion = version; } else if (SyndicationResourceMetadata.TryParseRssResource(resource, out navigator, out version)) { resourceFormat = SyndicationContentFormat.Rss; resourceRootNode = navigator; resourceVersion = version; } else { resourceFormat = SyndicationContentFormat.None; resourceRootNode = null; resourceVersion = null; } }