0

以下は私のサンプルコードです

public static string GetGeoLoc(string latitude, string longitude,
        out string Address_ShortCountryName,
        out string Address_country,
        out string Address_administrative_area_level_1,
        out string Address_administrative_area_level_1_short_name,
        out string Address_administrative_area_level_2,
        out string Address_administrative_area_level_3,
        out string Address_colloquial_area,
        out string Address_locality,
        out string Address_sublocality,
        out string Address_neighborhood)
    {
        Address_ShortCountryName = "";
        Address_country = "";
        Address_administrative_area_level_1 = "";
        Address_administrative_area_level_1_short_name = "";
        Address_administrative_area_level_2 = "";
        Address_administrative_area_level_3 = "";
        Address_colloquial_area = "";
        Address_locality = "";
        Address_sublocality = "";
        Address_neighborhood = "";

        XmlDocument doc = new XmlDocument();

        try
        {
            doc.Load("http://maps.googleapis.com/maps/api/geocode/xml?latlng=" + latitude + "," + longitude + "&sensor=false");
            XmlNode element = doc.SelectSingleNode("//GeocodeResponse/status");
            if (element.InnerText == "ZERO_RESULTS")
            {
                return ("No data available for the specified location");
            }
            else
            {

                element = doc.SelectSingleNode("//GeocodeResponse/result/formatted_address");

                string longname = "";
                string shortname = "";
                string typename = "";


                XmlNodeList xnList = doc.SelectNodes("//GeocodeResponse/result/address_component");
                foreach (XmlNode xn in xnList)
                {
                    try
                    {
                        longname = xn["long_name"].InnerText;
                        shortname = xn["short_name"].InnerText;
                        typename = xn["type"].InnerText;

                        switch (typename)
                        {
                            case "country":
                                {
                                    Address_country = longname;
                                    Address_ShortCountryName = shortname;
                                    break;
                                }

                            case "locality":
                                {
                                    Address_locality = longname;
                                    break;
                                }

                            case "sublocality":
                                {
                                    Address_sublocality = longname;
                                    break;
                                }

                            case "neighborhood":
                                {
                                    Address_neighborhood = longname;
                                    break;
                                }

                            case "colloquial_area":
                                {
                                    Address_colloquial_area = longname;
                                    break;
                                }

                            case "administrative_area_level_1":
                                {
                                    Address_administrative_area_level_1 = longname;
                                    Address_administrative_area_level_1_short_name = shortname;
                                    break;
                                }

                            case "administrative_area_level_2":
                                {
                                    Address_administrative_area_level_2 = longname;
                                    break;
                                }

                            case "administrative_area_level_3":
                                {
                                    Address_administrative_area_level_3 = longname;
                                    break;
                                }

                            default:
                                break;
                        }
                    }

                    catch (Exception e)
                    {
                        clsExHandler.Instance.Write(e);
                    }
                }
                return (element.InnerText);
            }

        }
        catch (Exception ex)
        {
            return ("(Address lookup failed: ) " + ex.Message);
        }
    }

緯度を 33.4965、経度を -112.205 として渡してみてください

行の無効なオブジェクトへの例外オブジェクト参照を取得しています

**typename = xn["type"].InnerText;**

ステップバイステップでデバッグすると、 ["type"] のような属性はありません

また、他の言語文字があるのはなぜですか?

この問題を解決するにはどうすればよいですか。

4

2 に答える 2

0

私は c# に詳しくなく、コードが正しいかどうかもわかりません (たとえば、types は属性ではなく、elementNode です)。

コードが正しく、 を使用してノードを選択できると仮定するとnode['nameOfChildNode']、XML ファイルを調べるときにhttp://maps.googleapis.com/maps/api/geocode/xml?latlng=33.4965,-112.205&sensor=false<type> 2 の address_components と 2のないaddress_components があることがわかります<type>

<type>行方不明のプロパティ(InnerText)にアクセスしようとすると、コードが壊れると思います<type>

できること: を使用selectSingleNode して選択し、<type>返されたときにnullフォールバックを実装するか、それ以上の処理を終了します。

于 2013-06-25T09:01:06.887 に答える
0

http://maps.googleapis.com/maps/api/geocode/json?latlng=33.4965%20,%20-112.205&sensor=false

戻り値

{
   "results" : [],
   "status" : "ZERO_RESULTS"
}

したがって

XmlNode element = doc.SelectSingleNode("//GeocodeResponse/status");
            if (element.InnerText == "ZERO_RESULTS")
            {
                return ("No data available for the specified location");
            }

引っかかりませんZERO_RESULTS

私は C# に慣れていないので、これ以上のことはできません。

于 2013-06-25T11:26:04.257 に答える