Monodevelop parse a soap response

I read this and other forums for several hours and days and could not find a solution for my answer to the soap. I tried all kinds of answers here, but could not parse my answer :(

my answer:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <getLocationsResponse xmlns="http://getlocations.ws.hymedis.net">
            <locs>
                <loc>
                    <name>Zeebrugge Wielingen Zand</name>
                    <abbr>ZWZ</abbr>
                    <RDX>1435.8</RDX>
                    <RDY>378678.6</RDY>
                    <params>
                        <param>GHs</param>
                        <param>SS10</param>
                    </params>
                </loc>
            </locs>
        </getLocationsResponse>
    </soapenv:Body>
</soapenv:Envelope>

My C # code is still (param soapresponse is the whole soapresponse in string format), my answer is correct, so the full answer is xml soap, but cannot parse it well

public void readXml(string soapresponse){
        XmlDocument xmlresponse = new XmlDocument();
        xmlresponse.LoadXml(soapresponse);

        XmlNamespaceManager nsmanager = new XmlNamespaceManager(xmlresponse.NameTable);
        nsmanager.AddNamespace ("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");

        XmlNodeList nodes = xmlresponse.SelectNodes("/soapenv:Envelope/soapenv:Body/getLocationsResponse/locs/loc", nsmanager);
        List<Locatie> locatielijst = new List<Locatie>();
        // loop
        foreach(XmlNode node in nodes){
            string loc_naam = node["name"].InnerText;
            string loc_code = node["abbr"].InnerText;
            ...
            Locatie locatie = new Locatie();
            locatie.loc_naam = loc_naam;
            locatie.loc_code = loc_code;
            ...
            locatielijst.Add (locatie);
        }

        Console.WriteLine(locatielijst.Count.ToString());
        foreach(Locatie loc in locatielijst){
            Console.WriteLine (loc.loc_code);
        }

    }

but every time my .count list returns 0 -> so there is no data in them. Plz help me!

+3
source share
1 answer

The following code may work.

 
    public class MainClass
    {
        public static void Main (string [] args)
        {
            var response = new FileStream ("Response.xml", FileMode.Open);

            XDocument doc = XDocument.Load(response);
            XNamespace xmlns = "http://getlocations.ws.hymedis.net";

            var nodes = doc.Descendants(xmlns + "locs")
                                .Elements(xmlns + "loc");

            var list = new List();
            foreach (var node in nodes)
            {
                list.Add(new Location {
                    Name = node.Element(xmlns + "name").Value,
                    Code = node.Element(xmlns + "abbr").Value
                });
            }

            foreach (var item in list) {
                Console.WriteLine(item.Code);
            }
        }

        public class Location 
        {
            public string Code { get; set; }
            public string Name { get; set; }
        }
    }

, .net SOAP- WCF. , - WCF: http://johnwsaunders3.wordpress.com/2009/05/17/how-to-consume-a-web-service/

, .

, Wouter Willaert

+2

All Articles