0

やあみんな私の考えは単純です、私はUtrace APIを使ってIPアドレス(例ではプロキシ)から位置情報を取得します。

このコードを見てください(グーグルに感謝します)

public static string GetLocation(string IP)
    {
        var location = "";
        List<string> HTML_code = new List<string>();
        WebRequest request = WebRequest.Create("http://xml.utrace.de/?query=" + IP);
        using (WebResponse response = request.GetResponse())
        using (StreamReader stream = new StreamReader(response.GetResponseStream()))
        {
            string line;
            while ((line = stream.ReadLine()) != null)
            {
                HTML_code.Add(line);
            }
        }
        location = (HTML_code[296].Replace("<td><font size=\"-1\">", "")).Replace("</font></td>", "");
        return location;
    }

OKですが、utraceAPIからの出力は次のとおりです。

  <?xml version="1.0" encoding="iso-8859-1"?>
    <results>
    <result>
    <ip>188.40.16.134</ip>
    <host></host>
    <isp>Hetzner Online AG Pagedesign</isp>
    <org>Hetzner Online AG Pagedesign</org>
    <region>Koblenz</region>
    <countrycode>DE</countrycode>
    <latitude>50.349998474121</latitude>
    <longitude>7.5999999046326</longitude>
    <queries>8</queries>
    </result>
    </results>

私のXMLスキルは最高ではありません。皆さんがこの行を編集するのを手伝ってくれることを願っています。

location = (HTML_code[296].Replace("<td><font size=\"-1\">", "")).Replace("</font></td>", "");

私はこのような出力をします:

Hetzner Online AG Pagedesign : Koblenz

ではなく

<?xml version="1.0" encoding="iso-8859-1"?>
    <results>
    <result>
    <ip>188.40.16.134</ip>
    <host></host>
    <isp>Hetzner Online AG Pagedesign</isp>
    <org>Hetzner Online AG Pagedesign</org>
    <region>Koblenz</region>
    <countrycode>DE</countrycode>
    <latitude>50.349998474121</latitude>
    <longitude>7.5999999046326</longitude>
    <queries>8</queries>
    </result>
    </results>

よろしくお願いします

編集:

私の新しいコードは次のとおりです。

public static void getloc(string ip)
    {
        var location = "";
        var wc = new WebClient();
       location = wc.DownloadString("http://xml.utrace.de/?query=" + ip);
       location = location.Replace("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>", "").Replace("<results>", "").Replace("<result>", "")
           .Replace("<ip></ip>", "").Replace("<org></org>", "").Replace("<latitude></latitude>", "").Replace("<longitude></longitude>", "").Replace("<queries>*</queries>", "")
            .Replace("</result>", "").Replace("</results>", "");  
        Console.WriteLine(location);
    }

その場合、出力は次のようになります。

<ip>212.19.62.76</ip>
<host>1</host>
<isp>Plus.line AG</isp>
<org>ANW GmbH &amp; Co. KG</org>
<region>Bechhofen</region>
<countrycode>DE</countrycode>
<latitude>49.150001525879</latitude>
<longitude>10.550000190735</longitude>
<queries>6</queries>

Plus.line AG ANW GmbH&Co。KGBechhofenのような出力を取得するにはどうすればよいですか。

挨拶と感謝

4

2 に答える 2

0

Linq to Xmlを使用すると、非常に簡単です。

XDocument xdoc = XDocument.Parse(xml);
var result = xdoc.Descendatns("result")
                 .Select(r => new {
                     Org = (string)r.Element("org"),
                     Region = (string)r.Element("region")
                 }).Single();

これにより、プロパティOrgおよびRegionを持つ強く型付けされた匿名オブジェクトが返されます。フォーマット:

String.Format("{0} : {1}", result.Org, result.Region);
于 2013-02-07T14:46:13.033 に答える
0

XML を にロードし、XmlDocument適切に解析します。

public static void getLoc(string ip)
{
    var wc = new WebClient();
    string location = wc.DownloadString("http://xml.utrace.de/?query=" + ip);

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(location);

    XmlNode orgNode = doc.SelectSingleNode("//org/text()");
    XmlNode regionNode = doc.SelectSingleNode("//region/text()");

    return String.Format("{0} {1}", orgNode.Value, regionNode.Value);
}
于 2013-02-07T14:19:15.620 に答える