diff options
Diffstat (limited to 'OpenSim/Server/Base/ServerUtils.cs')
-rw-r--r-- | OpenSim/Server/Base/ServerUtils.cs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs index ae7ec0f..6c2b3ed 100644 --- a/OpenSim/Server/Base/ServerUtils.cs +++ b/OpenSim/Server/Base/ServerUtils.cs | |||
@@ -255,5 +255,47 @@ namespace OpenSim.Server.Base | |||
255 | parent.AppendChild(elem); | 255 | parent.AppendChild(elem); |
256 | } | 256 | } |
257 | } | 257 | } |
258 | |||
259 | public static Dictionary<string, object> ParseXmlResponse(string data) | ||
260 | { | ||
261 | Dictionary<string, object> ret = new Dictionary<string, object>(); | ||
262 | |||
263 | XmlDocument doc = new XmlDocument(); | ||
264 | |||
265 | doc.LoadXml(data); | ||
266 | |||
267 | XmlNodeList rootL = doc.GetElementsByTagName("ServerResponse"); | ||
268 | |||
269 | if (rootL.Count != 1) | ||
270 | return ret; | ||
271 | |||
272 | XmlNode rootNode = rootL[0]; | ||
273 | |||
274 | ret = ParseElement(rootNode); | ||
275 | |||
276 | return ret; | ||
277 | } | ||
278 | |||
279 | private static Dictionary<string, object> ParseElement(XmlNode element) | ||
280 | { | ||
281 | Dictionary<string, object> ret = new Dictionary<string, object>(); | ||
282 | |||
283 | XmlNodeList partL = element.ChildNodes; | ||
284 | |||
285 | foreach (XmlNode part in partL) | ||
286 | { | ||
287 | XmlNode type = part.Attributes.GetNamedItem("Type"); | ||
288 | if (type == null || type.Value != "List") | ||
289 | { | ||
290 | ret[part.Name] = part.InnerText; | ||
291 | } | ||
292 | else | ||
293 | { | ||
294 | ret[part.Name] = ParseElement(part); | ||
295 | } | ||
296 | } | ||
297 | |||
298 | return ret; | ||
299 | } | ||
258 | } | 300 | } |
259 | } | 301 | } |