public XmlDictionaryReader GetReaderAtContent() { if (writer_extension != null) { // It is messy, but it somehow returns an XmlReader that has wrapper "content" element for non-XmlReader extension... XmlReader r = extension.GetReader(); if (!(r is XmlDictionaryReader)) { r = XmlDictionaryReader.CreateDictionaryReader(r); } var ms = new MemoryStream(); var xw = XmlDictionaryWriter.CreateBinaryWriter(ms, null, null, false); xw.WriteStartElement("content", Namespaces.Atom10); xw.WriteAttributeString("type", "text/xml"); while (!r.EOF) { xw.WriteNode(r, false); } xw.WriteEndElement(); xw.Close(); ms.Position = 0; var xr = XmlDictionaryReader.CreateBinaryReader(ms, new XmlDictionaryReaderQuotas()); xr.MoveToContent(); return(xr); } else { XmlReader r = extension.GetReader(); if (!(r is XmlDictionaryReader)) { r = XmlDictionaryReader.CreateDictionaryReader(r); } return((XmlDictionaryReader)r); } }
private TimeSpan?TryReadTimeToLiveFromExtension(SyndicationElementExtensionCollection elementExtensions) { SyndicationElementExtension timeToLiveElement = elementExtensions .FirstOrDefault(e => e.OuterName == Rss20Constants.TimeToLiveTag && e.OuterNamespace == Rss20Constants.Rss20Namespace); if (timeToLiveElement == null) { return(null); } using (XmlReader reader = timeToLiveElement.GetReader()) { string value = reader.ReadElementString(); if (int.TryParse(value, out int timeToLive)) { if (timeToLive >= 0) { return(TimeSpan.FromMinutes(timeToLive)); } else { return(null); } } else { return(null); } } }
public XmlDictionaryReader GetReaderAtContent() { XmlReader r = extension.GetReader(); if (!(r is XmlDictionaryReader)) { r = XmlDictionaryReader.CreateDictionaryReader(r); } return((XmlDictionaryReader)r); }
private SyndicationTextInput TryReadTextInputFromExtension(SyndicationElementExtensionCollection elementExtensions) { SyndicationElementExtension textInputElement = elementExtensions .Where(e => e.OuterName == Rss20Constants.TextInputTag && e.OuterNamespace == Rss20Constants.Rss20Namespace) .FirstOrDefault(); if (textInputElement == null) { return(null); } var textInput = new SyndicationTextInput(); using (XmlReader reader = textInputElement.GetReader()) { reader.ReadStartElement(); while (reader.IsStartElement()) { string name = reader.LocalName; string value = reader.ReadElementString(); switch (name) { case Rss20Constants.DescriptionTag: textInput.Description = value; break; case Rss20Constants.TitleTag: textInput.Title = value; break; case Rss20Constants.LinkTag: textInput.Link = new SyndicationLink(new Uri(value, UriKind.RelativeOrAbsolute)); break; case Rss20Constants.NameTag: textInput.Name = value; break; default: break; } } reader.ReadEndElement(); } return(IsValidTextInput(textInput) ? textInput : null); }
private SyndicationLink TryReadDocumentationFromExtension(SyndicationElementExtensionCollection elementExtensions) { SyndicationElementExtension documentationElement = elementExtensions .Where(e => e.OuterName == Rss20Constants.DocumentationTag && e.OuterNamespace == Rss20Constants.Rss20Namespace) .FirstOrDefault(); if (documentationElement == null) { return(null); } using (XmlReader reader = documentationElement.GetReader()) { SyndicationLink documentation = Rss20FeedFormatter.ReadAlternateLink(reader, BaseUri, SyndicationFeedFormatter.DefaultUriParser, preserveAttributeExtensions: true); return(documentation); } }
private void TryReadSkipHoursFromExtension(SyndicationElementExtensionCollection elementExtensions, Collection <int> skipHours) { SyndicationElementExtension skipHoursElement = elementExtensions .Where(e => e.OuterName == Rss20Constants.SkipHoursTag && e.OuterNamespace == Rss20Constants.Rss20Namespace) .FirstOrDefault(); if (skipHoursElement == null) { return; } using (XmlReader reader = skipHoursElement.GetReader()) { reader.ReadStartElement(); while (reader.IsStartElement()) { if (reader.LocalName == Rss20Constants.HourTag) { string value = reader.ReadElementString(); int hour; bool parsed = int.TryParse(value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out hour); if (!parsed || (hour < 0 || hour > 23)) { throw new FormatException(string.Format(SR.InvalidSkipHourValue, value)); } skipHours.Add(hour); } else { reader.Skip(); } } } }
private void TryReadSkipDaysFromExtension(SyndicationElementExtensionCollection elementExtensions, Collection <string> skipDays) { SyndicationElementExtension skipDaysElement = elementExtensions .Where(e => e.OuterName == Rss20Constants.SkipDaysTag && e.OuterNamespace == Rss20Constants.Rss20Namespace) .FirstOrDefault(); if (skipDaysElement == null) { return; } using (XmlReader reader = skipDaysElement.GetReader()) { reader.ReadStartElement(); while (reader.IsStartElement()) { if (reader.LocalName == Rss20Constants.DayTag) { string day = reader.ReadElementString(); //Check if the day is actually an accepted day. if (IsValidDay(day)) { skipDays.Add(day); } } else { reader.Skip(); } } reader.ReadEndElement(); } }
public void GetReaderAtContent () { var x = new SyndicationElementExtension (6); // premise. Assert.AreEqual ("<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">6</int>", x.GetReader ().ReadOuterXml (), "#1"); var t = new XmlSyndicationContent ("text/xml", 6, (XmlObjectSerializer) null); Assert.AreEqual ("<content type=\"text/xml\" xmlns=\"http://www.w3.org/2005/Atom\"><int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">6</int></content>", t.GetReaderAtContent ().ReadOuterXml (), "#2"); }
public static Form Parse(SyndicationElementExtension atomExtension) { return Parse(atomExtension.GetReader().ReadOuterXml()); }