public void ReadXml(XmlReader reader) { bool isEmpty = reader.IsEmptyElement; AddAttributeExtensions(reader); reader.ReadStartElement(); if (!isEmpty) { while (reader.IsStartElement()) { if (reader.LocalName == MediaRssContent.ELEMENT_NAME) { var contentNode = new MediaRssContent(); contentNode.ReadXml(reader); ContentNodes.Add(contentNode); } else if (MediaRssHelper.TryParseOptionalElement(OptionalElements, reader) == false) ElementExtensions.Add((XElement)XNode.ReadFrom(reader)); } reader.ReadEndElement(); } }
protected override bool TryParseElement(XmlReader reader, string version) { var parsed = false; try { if (version == SyndicationVersions.Rss20 && reader.NamespaceURI == MediaRssBase.NS_URI) { switch (reader.LocalName) { case MediaRssContent.ELEMENT_NAME: var contentNode = new MediaRssContent(); contentNode.ReadXml(reader); ContentNodes.Add(contentNode); parsed = true; break; case MediaRssGroup.ELEMENT_NAME: var groupNode = new MediaRssGroup(); groupNode.ReadXml(reader); GroupNodes.Add(groupNode); parsed = true; break; default: parsed = MediaRssHelper.TryParseOptionalElement(OptionalElements, reader); if (!parsed) parsed = base.TryParseElement(reader, version); break; } } return parsed; } catch (Exception) { //TODO Log error return false; } }
private static bool TryFormatMediaRssContent(MediaRssContent contentToFormat, XNamespaceAliasSet namespaceAliases, ExtensionManifestDirectory extensionManifestDirectory, out XElement contentElement) { contentElement = default; if (contentToFormat == null) { return(false); } var childElements = new List <XElement>(); var attributes = new List <XAttribute>(); // content fields if (!string.IsNullOrEmpty(contentToFormat.Url)) { attributes.Add(new XAttribute("url", contentToFormat.Url)); } if (contentToFormat.FileSize != null) { attributes.Add(new XAttribute("fileSize", contentToFormat.FileSize.Value.ToString(CultureInfo.InvariantCulture))); } if (!string.IsNullOrEmpty(contentToFormat.Type)) { attributes.Add(new XAttribute("type", contentToFormat.Type)); } if (contentToFormat.Medium != null) { attributes.Add(new XAttribute("medium", contentToFormat.Medium.Value.ToString().ToLowerInvariant())); } if (contentToFormat.IsDefault != null) { attributes.Add(new XAttribute("isDefault", contentToFormat.IsDefault.Value ? "true" : "false")); } if (contentToFormat.Expression != MediaRssExpression.Full) { attributes.Add(new XAttribute("expression", contentToFormat.Expression.ToString().ToLowerInvariant())); } if (contentToFormat.BitRate != null) { attributes.Add(new XAttribute("bitrate", contentToFormat.BitRate.Value.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.FrameRate != null) { attributes.Add(new XAttribute("framerate", contentToFormat.FrameRate.Value.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.SamplingRate != null) { attributes.Add(new XAttribute("samplingrate", contentToFormat.SamplingRate.Value.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.Channels != null) { attributes.Add(new XAttribute("channels", contentToFormat.Channels.Value.ToString(CultureInfo.InvariantCulture))); } if (contentToFormat.Duration != null) { attributes.Add(new XAttribute("duration", contentToFormat.Duration.Value.TotalSeconds.ToString("0.####", CultureInfo.InvariantCulture))); } if (contentToFormat.Height != null) { attributes.Add(new XAttribute("height", contentToFormat.Height.Value.ToString(CultureInfo.InvariantCulture))); } if (contentToFormat.Width != null) { attributes.Add(new XAttribute("width", contentToFormat.Width.Value.ToString(CultureInfo.InvariantCulture))); } if (!string.IsNullOrEmpty(contentToFormat.Lang)) { attributes.Add(new XAttribute("lang", contentToFormat.Lang)); } // container if (TryFormatMediaRssContainer(contentToFormat, namespaceAliases, extensionManifestDirectory, out var containerChildElements)) { foreach (var containerChildElement in containerChildElements) { childElements.Add(containerChildElement); } } // extensions if (ExtensibleEntityFormatter.TryFormatXElementExtensions(contentToFormat, namespaceAliases, extensionManifestDirectory, out var extensionElements)) { childElements.AddRange(extensionElements); } if (!childElements.Any() && !attributes.Any()) { return(false); } contentElement = new XElement(_media + "content", attributes); contentElement.AddRange(childElements); return(true); }
private static bool TryParseMediaRssContent(XElement contentElement, XNamespace ns, ExtensionManifestDirectory extensionManifestDirectory, out MediaRssContent parsedContent) { parsedContent = null; if (contentElement == null) { return(false); } // content fields if (TryParseStringAttribute(contentElement.Attribute("url"), out var parsedUrl)) { // ReSharper disable once ConstantNullCoalescingCondition parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Url = parsedUrl; } if (TryParseIntegerAttribute(contentElement.Attribute("fileSize"), out var parsedFileSize)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.FileSize = parsedFileSize; } if (TryParseStringAttribute(contentElement.Attribute("type"), out var parsedType)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Type = parsedType; } if (TryParseEnumAttribute <MediaRssMedium>(contentElement.Attribute("medium"), out var parsedMedium)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Medium = parsedMedium; } if (TryParseBoolAttribute(contentElement.Attribute("isDefault"), out var parsedIsDefault)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.IsDefault = parsedIsDefault; } if (TryParseEnumAttribute <MediaRssExpression>(contentElement.Attribute("expression"), out var parsedExpression)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Expression = parsedExpression; } if (TryParseDoubleAttribute(contentElement.Attribute("bitrate"), out var parsedBitRate)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.BitRate = parsedBitRate; } if (TryParseDoubleAttribute(contentElement.Attribute("framerate"), out var parsedFrameRate)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.FrameRate = parsedFrameRate; } if (TryParseDoubleAttribute(contentElement.Attribute("samplingrate"), out var parsedSamplingRate)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.SamplingRate = parsedSamplingRate; } if (TryParseIntegerAttribute(contentElement.Attribute("channels"), out var parsedChannels)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Channels = parsedChannels; } if (TryParseTimeSpanAttribute(contentElement.Attribute("duration"), out var parsedDuration)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Duration = parsedDuration; } if (TryParseIntegerAttribute(contentElement.Attribute("height"), out var parsedHeight)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Height = parsedHeight; } if (TryParseIntegerAttribute(contentElement.Attribute("width"), out var parsedWidth)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Width = parsedWidth; } if (TryParseStringAttribute(contentElement.Attribute("lang"), out var parsedLang)) { parsedContent = parsedContent ?? new MediaRssContent(); parsedContent.Lang = parsedLang; } // container ParseMediaRssContainer(contentElement, ns, extensionManifestDirectory, ref parsedContent); if (parsedContent == null) { return(false); } // extensions ExtensibleEntityParser.ParseXElementExtensions(contentElement, extensionManifestDirectory, parsedContent); return(true); }