public static void SerializeLLSDXmlElement(osUTF8 mb, OSD data, bool formal) { switch (data.Type) { case OSDType.Unknown: mb.Append(osUTF8Const.XMLundef); break; case OSDType.Boolean: if (data.AsBoolean()) { mb.Append(osUTF8Const.XMLfullbooleanOne); } else { mb.Append(osUTF8Const.XMLfullbooleanZero); } break; case OSDType.Integer: mb.Append(osUTF8Const.XMLintegerStart); mb.AppendInt(data.AsInteger()); mb.Append(osUTF8Const.XMLintegerEnd); break; case OSDType.Real: mb.Append(osUTF8Const.XMLrealStart); mb.AppendASCII(data.ToString()); mb.Append(osUTF8Const.XMLrealEnd); break; case OSDType.String: mb.Append(osUTF8Const.XMLstringStart); EscapeToXML(mb, data); mb.Append(osUTF8Const.XMLstringEnd); break; case OSDType.UUID: mb.Append(osUTF8Const.XMLuuidStart); mb.AppendUUID(data.AsUUID()); mb.Append(osUTF8Const.XMLuuidEnd); break; case OSDType.Date: mb.Append(osUTF8Const.XMLdateStart); mb.AppendASCII(data.ToString()); mb.Append(osUTF8Const.XMLdateEnd); break; case OSDType.URI: mb.Append(osUTF8Const.XMLuriStart); EscapeToXML(mb, data.ToString()); mb.Append(osUTF8Const.XMLuriEnd); break; case OSDType.Binary: if (formal) { mb.Append(osUTF8Const.XMLformalBinaryStart); } else { mb.Append(osUTF8Const.XMLbinaryStart); } base64Encode(data.AsBinary(), mb); mb.Append(osUTF8Const.XMLbinaryEnd); break; case OSDType.Map: mb.Append(osUTF8Const.XMLmapStart); foreach (KeyValuePair <string, OSD> kvp in (OSDMap)data) { mb.Append(osUTF8Const.XMLkeyStart); mb.Append(kvp.Key.ToString()); mb.Append(osUTF8Const.XMLkeyEnd); SerializeLLSDXmlElement(mb, kvp.Value, formal); } mb.Append(osUTF8Const.XMLmapEnd); break; case OSDType.Array: OSDArray array = (OSDArray)data; mb.Append(osUTF8Const.XMLarrayStart); for (int i = 0; i < array.Count; i++) { SerializeLLSDXmlElement(mb, array[i], formal); } mb.Append(osUTF8Const.XMLarrayEnd); break; case OSDType.LLSDxml: mb.Append(data.AsString()); break; default: break; } }