3

このフォーラムや他のフォーラムを何時間も何日も読んでいて、私の石鹸の反応の解決策を見つけることができません。ここであらゆる種類の回答を試しましたが、私の応答を解析できません:(

私の反応 :

<?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>

これまでの私のc#コード(param soapresponseは文字列形式のsoapresponse全体です)私の応答は正しいので、完全なxml soap応答ですが、うまく解析できません

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);
        }

    }

しかし、list.countが0->を返すたびに、データが含まれていません。plzが役に立ちます。

4

1 に答える 1

2

次のコードが機能する可能性があります。

 
    パブリック クラス MainClass
    {
        public static void Main(string[] args)
        {
            var response = new FileStream("Response.xml", FileMode.Open);

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

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

            var list = new List();
            foreach (ノード内の var ノード)
            {
                list.Add(新しい場所 {
                    Name = node.Element(xmlns + "name").Value,
                    Code = node.Element(xmlns + "abbr").Value
                });
            }

            foreach (リスト内の変数項目) {
                Console.WriteLine(item.Code);
            }
        }

        公開クラス 場所
        {
            パブリック文字列コード { get; 設定; }
            パブリック文字列の名前 {get; 設定; }
        }
    }

私は mono の経験はあまりありませんが、.net により、WCF SOAP サービスを非常に簡単に利用できるようになりました。この記事では、WCF サービスのプロキシ クラスを生成する方法について説明します: http://johnwsaunders3.wordpress.com/2009/05/17/how-to-consume-a-web-service/

これが役立つことを願っています。

よろしく、 Wouter Willaert

于 2012-04-25T18:20:23.093 に答える