/// <summary> /// Deserialize a scene object from the original xml format /// </summary> /// <param name="serialization"></param> /// <returns></returns> public static SceneObjectGroup FromOriginalXmlFormat(UUID fromUserInventoryItemID, string xmlData, IRegistryCore scene) { //m_log.DebugFormat("[SOG]: Starting deserialization of SOG"); //int time = Util.EnvironmentTickCount(); try { StringReader sr; XmlTextReader reader; XmlNodeList parts; XmlDocument doc; doc = new XmlDocument(); doc.LoadXml(xmlData); parts = doc.GetElementsByTagName("RootPart"); if (parts.Count == 0) throw new Exception("Invalid Xml format - no root part"); sr = new StringReader(parts[0].InnerXml); reader = new XmlTextReader(sr); Scene m_sceneForGroup = scene is Scene ? (Scene)scene : null; SceneObjectGroup sceneObject = new SceneObjectGroup(FromXml(reader, scene), m_sceneForGroup, false); sceneObject.RootPart.FromUserInventoryItemID = fromUserInventoryItemID; reader.Close(); sr.Close(); parts = doc.GetElementsByTagName("Part"); for (int i = 0; i < parts.Count; i++) { sr = new StringReader(parts[i].InnerXml); reader = new XmlTextReader(sr); SceneObjectPart part = FromXml(reader, scene); sceneObject.AddChild(part, part.LinkNum); part.TrimPermissions(); part.StoreUndoState(); reader.Close(); sr.Close(); } // Script state may, or may not, exist. Not having any, is NOT // ever a problem. sceneObject.LoadScriptState(doc); return sceneObject; } catch (Exception e) { m_log.ErrorFormat( "[SERIALIZER]: Deserialization of xml failed with {0}. xml was {1}", e, xmlData); return null; } }
//////// Read ///////// public static bool Xml2ToSOG(XmlTextReader reader, SceneObjectGroup sog) { reader.Read(); reader.ReadStartElement("SceneObjectGroup"); SceneObjectPart root = Xml2ToSOP(reader, sog.Scene); if (root != null) sog.SetRootPart(root); else { return false; } if (sog.UUID == UUID.Zero) sog.UUID = sog.RootPart.UUID; reader.Read(); // OtherParts while (!reader.EOF) { switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name == "SceneObjectPart") { SceneObjectPart child = Xml2ToSOP(reader, sog.Scene); if (child != null) sog.AddChild(child, child.LinkNum); } else { //Logger.Log("Found unexpected prim XML element " + reader.Name, Helpers.LogLevel.Debug); reader.Read(); } break; case XmlNodeType.EndElement: default: reader.Read(); break; } } return true; }
public static SceneObjectGroup FromXml2Format(string xmlData, Scene scene) { //m_log.DebugFormat("[SOG]: Starting deserialization of SOG"); //int time = Util.EnvironmentTickCount(); try { XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlData); XmlNodeList parts = doc.GetElementsByTagName("SceneObjectPart"); if (parts.Count == 0) { m_log.ErrorFormat("[SERIALIZER]: Deserialization of xml failed: No SceneObjectPart nodes. xml was " + xmlData); return null; } StringReader sr = new StringReader(parts[0].OuterXml); XmlTextReader reader = new XmlTextReader(sr); SceneObjectGroup sceneObject = new SceneObjectGroup(FromXml(reader, scene), scene); reader.Close(); sr.Close(); // Then deal with the rest for (int i = 1; i < parts.Count; i++) { sr = new StringReader(parts[i].OuterXml); reader = new XmlTextReader(sr); SceneObjectPart part = FromXml(reader, scene); sceneObject.AddChild(part, part.LinkNum); part.StoreUndoState(); reader.Close(); sr.Close(); } // Script state may, or may not, exist. Not having any, is NOT // ever a problem. sceneObject.LoadScriptState(doc); return sceneObject; } catch (Exception e) { m_log.ErrorFormat("[SERIALIZER]: Deserialization of xml failed with {0}. xml was {1}", e, xmlData); return null; } }
private static SceneObjectGroup InternalFromXml2Format(XmlDocument doc, Scene scene) { //m_log.DebugFormat("[SOG]: Starting deserialization of SOG"); //int time = Util.EnvironmentTickCount(); try { XmlNodeList parts = doc.GetElementsByTagName("SceneObjectPart"); if (parts.Count == 0) { m_log.ErrorFormat("[SERIALIZER]: Deserialization of xml failed: No SceneObjectPart nodes. xml was " + doc.Value); return null; } StringReader sr = new StringReader(parts[0].OuterXml); XmlTextReader reader = new XmlTextReader(sr); SceneObjectGroup sceneObject = new SceneObjectGroup(FromXml(reader, scene), scene); reader.Close(); sr.Close(); // Then deal with the rest for (int i = 1; i < parts.Count; i++) { sr = new StringReader(parts[i].OuterXml); reader = new XmlTextReader(sr); SceneObjectPart part = FromXml(reader, scene); sceneObject.AddChild(part, part.LinkNum); part.StoreUndoState(); reader.Close(); sr.Close(); } return sceneObject; } catch (Exception e) { m_log.ErrorFormat("[SERIALIZER]: Deserialization of xml failed with {0}. xml was {1}", e, doc.Value); return null; } }