Необходимо убедиться, что в запросах используются правильные пространства имен XML.Кроме того, для LINQ to XML используйте XDocument
, а не XmlDocument
, который относится к старым System.Xml
.
. Это то, что мне удалось придумать до сих пор:
XDocument doc = XDocument.Parse(xml);
XNamespace wsdl = "http://schemas.xmlsoap.org/wsdl/";
XNamespace s = "http://www.w3.org/2001/XMLSchema";
var schema = doc.Root
.Element(wsdl + "types")
.Element(s + "schema");
var elements = schema.Elements(s + "element");
Func<XElement, string> getName = (el) => el.Attribute("name").Value;
// these are all method names
var names = from el in elements
let name = getName(el)
where !name.EndsWith("Response")
select name;
string methodName = "GetDummyType";
var method = elements
.Single(el => getName(el) == methodName);
// these are all parameters for a given method
var parameters = from par in method.Descendants(s + "element")
select getName(par);
Я проверил этот код, и он работает с вашими данными.
Однако я не совсем уверен, что это самое простое решение, поэтому я приветствую любые предложения по сокращению кода.
Best,
Dan