0

XMLから特定の行を返そうとしています。

<geoip>
    <source>smart-ip.net</source>
    <host>68.9.63.33</host>
    <lang>en</lang>
    <countryName>United States</countryName>
    <countryCode>US</countryCode>
    <city>West Greenwich</city>
    <region>Rhode Island</region>
    <latitude>41.6298</latitude>
    <longitude>-71.6677</longitude>
    <timezone>America/New_York</timezone>
</geoip>

以前はフルダンプを取得していましたが、現在はこのコードを使用しています...

[送信]をクリックすると、これが表示nullされます。nameXML呼び出しを読み取らない理由がわかりません。

これが私のコードです...

try {
    WebClient wc = new WebClient();

    var xml = wc.DownloadString(string.Format("http://smart-ip.net/geoip-xml/",
                                txtIP.Text));

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

    var name = doc.DocumentElement.SelectSingleNode("//geoip/countryName").Value;
    txtIPresults.Text = name;
} catch (Exception myException) {
    throw new Exception("Error Occurred:", myException);
}
4

2 に答える 2

2

検索している XML にはSelectSingleNode、パラメーターに一致するパスが含まれていません。その関数のデフォルトの戻り値は null です。したがって、パスが見つからない場合nullは が返されます。

また、指定した Web ページにアクセスしようとすると、サーバー エラーが発生します。xml少なくとも、変数にコンテンツがあることを確認することをお勧めします。

(編集)

XML を確認したところValue、返された単一のノードを呼び出していることがわかりました。値ではなく、InnerTextプロパティが必要です。探している値が見つかります。

于 2012-12-18T21:01:08.783 に答える
1

InnerTextJonが正しく提案したように使用する以外に、試してください:

var name = doc.DocumentElement.SelectSingleNode("countryName").InnerText;

doc.DocumentElement問題は、それが既にXML 要素であるため、その子geoipを取得するだけでよいことだと思います。countryName

または:

var name = doc.SelectSingleNode("//geoip/countryName").InnerText;
于 2012-12-18T21:16:23.123 に答える