private static void FromXmlOSData(PrimitiveMedia media, XmlTextReader reader) { for (;;) { if (!reader.Read()) { throw new XmlException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name == "llsd") { AnArray entries = LlsdXml.DeserializeLLSDNode(reader) as AnArray; foreach (IValue iv in entries) { Map m = iv as Map; if (m != null) { media.Add(new Entry(m)); } else { media.Add(null); } } } else { reader.ReadToEndElement(); } break; case XmlNodeType.EndElement: if (reader.Name != "OSData") { throw new XmlException(); } return; } } }
private static void FromXmlOSMedia(PrimitiveMedia media, XmlTextReader reader) { for (; ;) { if (!reader.Read()) { throw new XmlException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.IsEmptyElement) { break; } if (reader.Name == "OSData") { FromXmlOSData(media, reader); } else { reader.ReadToEndElement(); } break; case XmlNodeType.EndElement: if (reader.Name != "OSMedia") { throw new XmlException(); } return; default: break; } } }
private static void FromStringifiedXmlOSMedia(PrimitiveMedia media, XmlTextReader reader) { for (;;) { if (!reader.Read()) { throw new XmlException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name == "OSMedia") { FromXmlOSMedia(media, reader); return; } break; default: break; } } }
public static PrimitiveMedia FromXml(XmlTextReader reader) { if (reader.IsEmptyElement) { return(null); } PrimitiveMedia media = new PrimitiveMedia(); StringBuilder textNode = new StringBuilder(); bool haveNodeInside = false; for (; ;) { if (!reader.Read()) { throw new XmlException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.IsEmptyElement) { break; } switch (reader.Name) { case "OSMedia": haveNodeInside = true; FromXmlOSMedia(media, reader); break; default: reader.ReadToEndElement(); break; } break; case XmlNodeType.Text: textNode.Append(reader.Value); break; case XmlNodeType.EndElement: if (reader.Name != "Media") { throw new XmlException(); } if (!haveNodeInside) { /* this is stringified version */ using (MemoryStream ms = new MemoryStream(textNode.ToString().ToUTF8Bytes())) { using (XmlTextReader insetReader = ms.CreateXmlReader()) { FromStringifiedXmlOSMedia(media, insetReader); } } } return(media); default: break; } } }