/// <summary> /// parse the response /// </summary> /// <returns></returns> public static Parameters ParseParams(XmppXElement el) { var al = new Parameters(); // If an error occurred, the server will return fault var fault = el.Element <Fault>(); if (fault != null) { var structParameter = ParseStruct(fault.Element <Struct>(true)); al.Add(new XmlRpcException((Int16)structParameter["faultCode"], (string)structParameter["faultString"])); } else { XmppXElement elParams = el.Element <Params>(); var nl = elParams.Elements <Param>(); foreach (var p in nl) { var value = p.Element <Value>(); if (value != null) { al.Add(ParseValue(value)); } } } return(al); }
private string GetStanzaAsString(XmppXElement xel, string type, int number) { var stanza = xel .Elements("stanza") .FirstOrDefault(s => s.Attribute("type").Value == type && s.Attribute("id").Value == number.ToString()); return(stanza? .DescendantNodes() .Where(d => d.NodeType == System.Xml.XmlNodeType.CDATA) .Cast <XCData>() .FirstOrDefault() .Value .Trim(' ', '\r', '\n')); }
/// <summary> /// parse a response struct /// </summary> /// <param name="el">The el.</param> /// <returns></returns> private static StructParameter ParseStruct(XmppXElement el) { #region Xml sample //<struct> // <member> // <name>x</name> // <value><i4>20</i4></value> // </member> // <member> // <name>y</name> // <value><string>cow</string></value> // </member> // <member> // <name>z</name> // <value><double>3,14</double></value> // </member> //</struct> #endregion var structParameter = new StructParameter(); var members = el.Elements <Member>(); foreach (var member in members) { var xElementName = member.Element <Name>(); if (xElementName == null) { continue; } var name = xElementName.Value; // parse this member value var xElementValue = member.Element <Value>(); if (xElementValue != null) { structParameter.Add(name, ParseValue(xElementValue)); } } return(structParameter); }