从xml中检索值 - c#

时间:2016-04-12 12:37:13

标签: c# .net

我有来自API的以下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>xxxxxx</City>
<StateProvince>12</StateProvince>
<Country>xxxxxx</Country>
<Organization/>
<Latitude>13.0833</Latitude>
<Longitude>80.28329</Longitude>
<AreaCode>0</AreaCode>
<TimeZone/>
<HasDaylightSavings>false</HasDaylightSavings>
<Certainty>90</Certainty>
<RegionName/>
<CountryCode>xx</CountryCode>
</IPInformation>

我需要从xml以上获取LatitudeLongitude值并将其存储在字符串中。

我正在研究c#.net 3.5框架,我尝试了下面的代码,

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(response.GetResponseStream());
location = xmlDoc.DocumentElement.SelectSingleNode("//City");
latitude = xmlDoc.DocumentElement.SelectSingleNode("//Latitude");

我总是Null代替13.083380.28329

任何人都可以告诉我如何从xml以上检索LatitudeLongitude值。

由于

2 个答案:

答案 0 :(得分:4)

您的问题是命名空间。我将您的XML复制到a.xml和以下作品(LINQpad):

void Main()
{
    var a = @"c:\temp\a\a.xml";
    XmlDocument x = new XmlDocument();
    x.Load(a);

    var ns = new XmlNamespaceManager(x.NameTable);
    ns.AddNamespace("x", x.DocumentElement.NamespaceURI);
    x.DocumentElement.SelectSingleNode("//x:Longitude", ns).Dump();

}

打印

<Longitude xmlns="http://ws.cdyne.com/">80.28329</Longitude>

答案 1 :(得分:0)

首先,您的xml中有两个xmlns属性声明 - 如果删除xmlns="http://ws.cdyne.com/"并将查询更改为/IPInformation/Latitude,则会返回有效的XMLNode。