解析XML c#问题

1 c# xml parsing

        private void nsButton3_Click(object sender, EventArgs e)
    {
        string geoip = nsTextBox4.Text;
        WebClient wc = new WebClient();
        string geoipxml = (wc.DownloadString("http://freegeoip.net/xml/" + geoip));
        StringBuilder output = new StringBuilder();
        using (XmlReader reader = XmlReader.Create(new StringReader(geoipxml)))
        {
            reader.ReadToFollowing("Response");
            reader.MoveToFirstAttribute();
            string geoipanswer = reader.Value;
            MessageBox.Show(geoipanswer);
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我单击按钮时,会显示一个空文本框.假设显示IP地址.XML响应看起来像这样..

<Response>
<Ip>69.242.21.115</Ip>
<CountryCode>US</CountryCode>
<CountryName>United States</CountryName>
<RegionCode>DE</RegionCode>
<RegionName>Delaware</RegionName>
<City>Wilmington</City>
<ZipCode>19805</ZipCode>
<Latitude>39.7472</Latitude>
<Longitude>-75.5918</Longitude>
<MetroCode>504</MetroCode>
<AreaCode>302</AreaCode>
</Response>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mar*_*zek 5

是.Ip是一个元素,你正试图读它,好像它是和属性:

reader.MoveToFirstAttribute();
Run Code Online (Sandbox Code Playgroud)

我建议切换到LINQ to XML:

string geoipxml = (wc.DownloadString("http://freegeoip.net/xml/" + geoip));
var xDoc = XDocument.Parse(geoipxml);
string geoipanswer = (string)xDoc.Root.Element("Ip");
MessageBox.Show(geoipanswer);
Run Code Online (Sandbox Code Playgroud)

你需要using System.Xml.Linq让它工作.