2

さて、私はC#に少し慣れていないので、http回答の値を取得しようとしています。しかし、私はこれまでそのXML関連のものを扱ったことはありませんでした。

簡単な例: http: //freegeoip.net/xml/123.123.123.123

<Response>
<Ip>123.123.123.123</Ip>
<CountryCode>CN</CountryCode>
<CountryName>China</CountryName>
<RegionCode>22</RegionCode>
<RegionName>Beijing</RegionName>
<City>Beijing</City>
<ZipCode/>
<Latitude>39.9289</Latitude>
<Longitude>116.388</Longitude>
<MetroCode/>
</Response>

<CountryName></CountryName>パーツをC#で返したいです。例はありますか?

4

3 に答える 3

3

2つの方法のいずれかでそれを行うことができます。迅速で汚い方法は、XML文字列でCountryNameを検索することですが、それが特に確実な答えではないかと思います。

提供されたXMLが整形式ではないという事実を踏まえて、この応答を警告します。プログラムでXMLを読み取るためのより良い答えは、System.Xml名前空間にあり、XmlDocumentオブジェクトを使用してデータをロードおよび解析することです。

using System.Xml;

public static void Main(String args[])
{
    XmlDocument foo = new XmlDocument();

    //Let's assume that the IP of the target player is in args[1]
    //This allows us to parameterize the Load method to reflect the IP address
    //of the user per the OP's request
    foo.Load( String.Format("http://freegeoip.net/xml/{0}",args[1])); 

    XmlNode root = foo.DocumentElement;

    // you might need to tweak the XPath query below
    XmlNode countryNameNode = root.SelectSingleNode("/Response/CountryName");

    Console.WriteLine(countryNameNode.InnerText);
}

これは100%完璧なソリューションではありませんが、良いスタートを切るはずです。お役に立てれば。

于 2012-09-20T00:34:22.320 に答える
0

XmlDocument.Loadメソッドを使用して、URLからドキュメントを取得します。

次に、XmlNode.SelectNodesメソッドを使用して、目的のノードを取得します。これを行うには、単純なXPath式を使用する必要があります。

LINQ2XMLを使用することもできます。

于 2012-09-20T00:24:45.540 に答える
0

このプログラムを試してください。次に、応答オブジェクトを介して情報にアクセスできます。

public class Response
{
    public string Ip { get; set; }
    public string Countrycode { get; set; }
    public string CountryName { get; set; }
    public string RegionCode { get; set; }
    public string City { get; set; }
    public string ZipCode { get; set; }
    public string Latitude { get; set; }
    public string Longitude { get; set; }
    public string MetroCode { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var client = new System.Net.WebClient();

        string downloadedString = client.DownloadString("http://freegeoip.net/xml/123.123.123.123");

        XmlSerializer mySerializer =
            new XmlSerializer(typeof(Response));

        Response response = null;

        XmlReader xmlReader = XmlReader.Create(new System.IO.StringReader(downloadedString));

        response = (Response)mySerializer.Deserialize(xmlReader);

    }
}
于 2012-09-20T01:04:36.343 に答える