private void ParseMPDElement() { Windows.Data.Xml.Dom.XmlElement root = document.DocumentElement; if (root.GetAttribute("type").ToLower().Equals("dynamic")) { manifest.IsLive = true; } if (root.GetAttribute("profiles").ToLower().Contains(LiveProfile)) { manifest.IsSupportedProfile = true; } if (!root.GetAttribute("availabilityStartTime").Equals("")) { string availabilityStartTime = root.GetAttribute("availabilityStartTime"); manifest.AvailibilityStartTime = XmlConvert.ToDateTimeOffset(availabilityStartTime); } if (!root.GetAttribute("minBufferTime").Equals("")) { string minBufferTime = root.GetAttribute("minBufferTime"); manifest.MinBufferTime = XmlConvert.ToTimeSpan(minBufferTime); } if (!root.GetAttribute("minimumUpdatePeriod").Equals("")) { manifest.HasMinimumUpdatePeriod = true; string minUpdatePeriod = root.GetAttribute("minimumUpdatePeriod"); manifest.MinimumUpdatePeriod = XmlConvert.ToTimeSpan(minUpdatePeriod); } if (!root.GetAttribute("mediaPresentationDuration").Equals("")) { manifest.HasPresentationDuration = true; string mediaPresentationDuration = root.GetAttribute("mediaPresentationDuration"); manifest.MediaPresentationDuration = XmlConvert.ToTimeSpan(mediaPresentationDuration); } if (!root.GetAttribute("timeShiftBufferDepth").Equals("")) { string timeShiftBufferDepth = root.GetAttribute("timeShiftBufferDepth"); manifest.TimeShiftBufferDepth = XmlConvert.ToTimeSpan(timeShiftBufferDepth); } if (!root.GetAttribute("publishTime").Equals("")) { string publishTime = root.GetAttribute("publishTime"); manifest.PublishTime = XmlConvert.ToDateTimeOffset(publishTime); } else { manifest.PublishTime = DateTimeOffset.MinValue; } Windows.Data.Xml.Dom.XmlNodeList periods = root.GetElementsByTagName("Period"); if (periods.Count() > 1) { manifest.HasMultiplePeriods = true; } IXmlNode lastPeriod = periods.Last <IXmlNode>(); if (lastPeriod.Attributes.GetNamedItem("duration") != null) { manifest.LastPeriodDuration = XmlConvert.ToTimeSpan(lastPeriod.Attributes.GetNamedItem("duration").InnerText); } }
public bool Parse() { var temp = this.Content; var results = new List <string>(); var potentialResults = new Stack <string>(); var prefix = string.Empty; var parses = Instructions.Split('|'); foreach (var parse in parses) { var colon = parse.IndexOf(':'); if (colon > -1) { var cmd = parse.Substring(0, colon); var part = parse.Substring(colon + 1); var save = cmd.Contains("?"); var nextToken = cmd.Contains("&"); var prefixed = cmd.Contains("+"); var restore = cmd.Contains("^"); if (nextToken) { results.Add(temp); temp = ""; } if (prefixed) { prefix += temp; temp = string.Empty; } if (restore) { temp = potentialResults.Count > 0 ? potentialResults.Pop() : this.Content; } if (save) { potentialResults.Push(prefix + temp); prefix = string.Empty; } var contains = temp.Contains(part); if (cmd.Contains("i")) { if (!CheckDoc(temp)) { return(false); } nodes = doc.SelectNodes(part); IsDictionary = true; } else if (cmd.Contains("k")) { keypart = part; } else if (cmd.Contains("v")) { valuepart = part; } else if (cmd.Contains("table") && nodes != null) { if (part.Contains("name=")) { Tablename = part.Substring(part.IndexOf("name=") + 5); var j = Tablename.IndexOf(";"); if (j > -1) { Tablename = Tablename.Substring(0, j); } } foreach (var node in nodes) { IXmlNode key = null; Windows.Data.Xml.Dom.XmlNodeList valueset = null; try { key = node.SelectSingleNode(keypart); valueset = node.SelectNodes(valuepart); } catch (Exception) { //skip if not matching continue; } if (!string.IsNullOrWhiteSpace(key?.InnerText)) { if (!string.IsNullOrWhiteSpace(key.InnerText) && !dictionary.ContainsKey(key.InnerText)) { var values = new StringBuilder(); var count = valueset.Count(); foreach (var value in valueset) { values.Append(value.InnerText); if (--count > 0) { values.Append("~"); } } dictionary.Add(key.InnerText, values.ToString()); } } } Debug.WriteLine(string.Format("Table {0} saved count = {1}", Tablename, dictionary.Count)); } else if (cmd.Contains("R")) { temp = temp.RightOf(part); } else if (cmd.Contains("L")) { temp = temp.LeftOf(part); } else if (cmd.Contains("B")) { temp = temp.Between(part); } else if (cmd.Contains("!")) { temp = part; } else if (cmd.Contains("J") || cmd.Contains("j")) { var jParsed = JToken.Parse(temp); if (jParsed != null) { var jToken = jParsed.SelectToken(part); if (jToken != null) { if (cmd.Contains("j")) { temp = ((JProperty)jToken).Name; if (cmd.Contains("J")) { temp += ":'" + jToken.Value <string>() + "'"; } } else { temp = jToken.Value <string>(); } } else { temp = string.Empty; } } else { temp = string.Empty; } } else if (cmd.Contains("X")) { var expr = new Regex(part); var matches = expr.Match(part); var matchResults = new StringBuilder(); while (matches.Success) { contains = true; matchResults.Append(matches.Value); matchResults.Append("~"); matches = matches.NextMatch(); } temp = matchResults.ToString(); if (!string.IsNullOrWhiteSpace(temp)) { temp = temp.Substring(0, temp.Length - 1); } } else if (cmd.Contains("F")) { results.Add(prefix + temp); prefix = string.Empty; temp = string.Format(part, results.ToArray()); results.Clear(); } if (save && !contains) { temp = potentialResults.Pop(); } } if (string.IsNullOrWhiteSpace(temp)) { break; } } if (!string.IsNullOrWhiteSpace(temp)) { results.Add(prefix + temp); prefix = string.Empty; } var builder = new StringBuilder(); for (var i = 0; i < results.Count; i++) { builder.Append(results[i]); if (i < results.Count - 1) { builder.Append("|"); } } Result = builder.Length == 0 ? string.Empty : builder.ToString(); return(true); }