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

您可以通过以下两种方式之一进行操作。快速而肮脏的方法是在 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

试试这个程序。然后您可以通过响应对象访问信息。

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 回答
0

使用XmlDocument.Load 方法从 URL 获取文档。

然后使用XmlNode.SelectNodes 方法获取您感兴趣的节点。为此,您需要使用简单的XPath Expression

您还可以使用LINQ2XML

于 2012-09-20T00:24:45.540 回答