public static Result Parse(string resultXml) { var document = XDocument.Parse(resultXml); var status = document.SafeGet <Status>("/result/status"); var result = new Result(status); var exceptionResult = document.XPathSelectElement("/result/exception/exceptionresult"); if (exceptionResult != null) { result.Exception = ExceptionResult.Parse(exceptionResult.ToString()); } foreach (var supplement in document.XPathSelectElements("/result/supplements/supplement")) { var key = supplement.Attribute("key")?.Value; var supplements = supplement.Elements("entry").ToDictionary(x => x.Attribute("key")?.Value, x => x.Value); if (key != null) { result.Supplements.Add(key, supplements); } } return(result); }
public IMessage SyncProcessMessage(IMessage msg) { var methodCall = msg as IMethodCallMessage; if (methodCall != null) { return(RemotingServices.ExecuteMessage(this, methodCall)); } // This is all a bit ugly but gives us version independance for the moment string value = msg.Properties["data"] as string; var doc = XDocument.Load(new StringReader(value)); var element = doc.XPathSelectElement("/listener/*"); var listener = (ISpecificationRunListener)this; switch (element.Name.ToString()) { case "onassemblystart": listener.OnAssemblyStart(AssemblyInfo.Parse(element.XPathSelectElement("//onassemblystart/*").ToString())); break; case "onassemblyend": listener.OnAssemblyEnd(AssemblyInfo.Parse(element.XPathSelectElement("//onassemblyend/*").ToString())); break; case "onrunstart": listener.OnRunStart(); break; case "onrunend": listener.OnRunEnd(); break; case "oncontextstart": listener.OnContextStart(ContextInfo.Parse(element.XPathSelectElement("//oncontextstart/*").ToString())); break; case "oncontextend": listener.OnContextEnd(ContextInfo.Parse(element.XPathSelectElement("//oncontextend/*").ToString())); break; case "onspecificationstart": listener.OnSpecificationStart(SpecificationInfo.Parse(element.XPathSelectElement("//onspecificationstart/*").ToString())); break; case "onspecificationend": listener.OnSpecificationEnd( SpecificationInfo.Parse(element.XPathSelectElement("//onspecificationend/specificationinfo").ToString()), Result.Parse(element.XPathSelectElement("//onspecificationend/result").ToString())); break; case "onfatalerror": listener.OnFatalError(ExceptionResult.Parse(element.XPathSelectElement("//onfatalerror/*").ToString())); break; } return(null); }