2016-04-12 17 views
2

cの私はAPIから次のXMLファイル、私はXML上からLatitudeLongitude値を取得し、文字列でそれを格納する必要がありは、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> 

を持っています。

私はC#の.NET 3.5フレームワークに取り組んでいます、私は

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

は、私はいつもの代わりに13.083380.28329Nullを取得しています、次のコードを試してみました。

上記のxmlからLatitudeLongitudeの値を取得する方法を教えてください。

ありがとうございました

+1

IPInformation型のオブジェクトにデシリアライズします.OOP方法を使用してください。 –

+0

良い点;しかし、それは、時代遅れのアプローチが期待どおりに機能しない理由を説明していません。 – Codor

+1

変数 'latitude'と' longitude'の型は何ですか? 'SelectSingleNode'メソッドは、選択されたノードの内容を解析しません。戻り値の型は 'XmlNode'であり、これは解析を行うためにさらに処理が必要です。 – Codor

答えて

4

あなたの問題は名前空間です。あなたがxmlns="http://ws.cdyne.com/"を除去するためにクエリを変更した場合 - あなたは2つのxmlnsがあなたのXMLで宣言属性を持つ開始について

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> 
+0

"Error" System.Xmlをビルドする際に、次のエラーが発生します。 XmlNode 'には' Dump 'の定義が含まれておらず、' System.Xml.XmlNode 'タイプの最初の引数を受け入れる拡張メソッド' Dump 'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?) " – user2681579

+0

' Dump'はLINQPadコマンドです。 'Console.WriteLine(x.DocumentElement.SelectSingleNode(" x:Longitude "、ns))または' Console.WriteLine(x.DocumentElement.SelectSingleNode( "x:Longitude"、ns).InnerText)を実行してみてください。 ; ' – rbm

+0

xmlDoc.DocumentElement.SelectSingleNode( "// x:Longitude"、ns).InnerXml.ToString(); - 私のために働いた。 – user2681579

0

:私はa.xmlと、次の作品(LINQpad)にあなたのXMLをコピー/IPInformation/Latitudeは、有効なXMLNodeを返します。

+0

いいえ、xmlns属性は2つありません。 'xmlns'はデフォルトの名前空間です。 – rbm

関連する問題