2016-01-13 2 views
0

Я пытаюсь получить страну, lat/long, timezone и т. Д. Из api, используя общедоступный ip.Исключительное исключение ссылки в xml - C#

Ниже ответ XML я получаю от апи,

<IPInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ws.cdyne.com/"> 
<City>Chennai</City> 
<StateProvince>25</StateProvince> 
<Country>India</Country> 
<Organization/> 
<Latitude>13.0833</Latitude> 
<Longitude>80.28329</Longitude> 
<AreaCode>0</AreaCode> 
<TimeZone/> 
<HasDaylightSavings>false</HasDaylightSavings> 
<Certainty>90</Certainty> 
<RegionName/> 
<CountryCode>IN</CountryCode> 
</IPInformation> 

Я загружая ответ в XML-файле, откуда с помощью SelectSingleNode я пытаюсь получить значение страны. Но всегда я получаю nullreferenceexception.

Ниже приведен код, я попробовал,

if (response.StatusCode.ToString().ToLower() == "ok") 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(response.GetResponseStream()); 
    XmlNode msgnode = xmlDoc.DocumentElement.SelectSingleNode("//Country"); -->getting null here 
    string msgname = msgnode.InnerText;          
} 

пытался ниже одного,

String country = xmlDoc.SelectSingleNode("IPInformation/Country").Value; 

SelectSingleNode всегда возвращают нулевое значение

Полный stactrace:

at SingleScanPalletTag.MobileClient.ScanOutMenu.GetGeoLocation() 
    at SingleScanPalletTag.MobileClient.ScanOutMenu.button1_Click(Object sender, EventArgs e) 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam) 
    at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam) 
    at Microsoft.AGL.Forms.EVL.EnterModalDialog(IntPtr hwnModal) 
    at System.Windows.Forms.Form.ShowDialog() 
    at SingleScanPalletTag.MobileClient.Program.Main() 

enter image description here

Может ли кто-нибудь сказать мне, как получить значение страны, широты и долготы из вышеуказанного xml.

Пожалуйста, помогите мне.

+0

Непонятно из вашего вопроса и комментариев коментария, откуда выбрасывается 'NullReferenceException'. Ли строка 'SelectSingleNode' генерирует исключение или возвращает« null », что приводит к« NullReferenceException »в следующей строке? – adv12

+0

@ adv12 SelectSingleNode возвращает нулевое значение – user2681579

+0

Пожалуйста, покажите нам полную стек. – etalon11

ответ

1

Как насчет пользователя XDocument() из System.Xml.Linq? Предполагая, что это XML-файл не является деревом ...

XDocument xmlDoc = new XDocument(); 
var sr = new System.IO.StreamReader(response.GetResponseStream()) 
xmlDoc = XDocument.Parse(sr.ReadToEnd()); 

var strCountry = xmlDoc.Root.Element("Country"); 

если XML есть дети, используют xmlDoc.Root.Descendants()

0

Если бы я имел больше репутации, я бы добавил комментарий указывал вам на этом this StackOverflow article но Я не могу создавать комментарии, так что это должен быть ответ.

Это, вероятно, дубликат, поэтому, если кто-то может его отметить, пожалуйста.

Это относится к пространствам имен, в частности к части xmlns="http://ws.cdyne.com/".

Создайте XmlNamespaceManager и добавьте пространство имен.

XmlDocument xmlDoc = new XmlDocument(); 
XmlNamespaceManager namespaces = new XmlNamespaceManager(xmlDoc.NameTable); 
namespaces.AddNamespace("ns", "http://ws.cdyne.com/"); 
xmlDoc.Load(response.GetResponseStream()); 
XmlNode msgnode = xmlDoc.DocumentElement.SelectSingleNode("/ns:IPInformation/ns:Country",namespaces); 
string msgname = msgnode.InnerText; 
+0

@ user2681579 Если вы нашли какой-либо ответ полезным, отметьте его как ответ. – Exxoff

Смежные вопросы