2017-12-07 18 views
0

第三者のXML文書を読み込んで、任意の日付にEurosの変換レートをGBPに変換する関数を作成しましたが、linqクエリはnull値を返しています。LINQ to XMLを使用してXML値を読み取るC#

XML:

<therate xmlns="http://somecurrencysite.com"> 
    <terms>someValue</terms> 
    <from>EUR</from> 
    <amount>1.0</amount> 
    <timestamp>2001-05-01T06:00:00Z</timestamp> 
    <to> 
     <rate> 
      <currency>GBP</currency> 
      <dayrate>0.619887217</dayrate> 
     </rate> 
    </to> 
</therate> 

C#が:

var uri = "http://somecurrencysite.com?date=" + date.ToString("yyyy-MM-dd") + "&to=GBP"; 

decimal rate; 

using (var client = new WebClient()) 
{ 
    client.Credentials = new NetworkCredential("userName", "passWord"); 

    try 
    { 
     var source = new MemoryStream(client.DownloadData(uri)); 
     var xRdr = new XmlTextReader(source); 
     rate = XDocument.Load(xRdr) 
      .Descendants("rate") 
      .Select(e => (decimal)e.Element("dayrate")) 
      .FirstOrDefault(); 
    } 
    catch (Exception ex) 
    { 
     Err.ErrMsg(ex); 
     throw; 
    } 
} 

return rate; 

誰かが、私はここに欠けているかを把握

乾杯を助けることができるしてください。あなたは、XML名前空間ホラーを可能にする必要が

答えて

1

XNamespace ns = "http://somecurrencysite.com"; 

var rate = XDocument.Load(xRdr) 
    .Descendants(ns + "to") 
    .Descendants(ns + "rate") 
    .Descendants(ns + "dayrate") 
    .Select(dr => Convert.ToDecimal(dr.Value)) 
    .FirstOrDefault() 
    ; 
+1

多く、迅速な対応、このような簡単な変更のおかげで感謝しています。それ以前は、GetElementsByTagName( "dayrate")[0] .InnerTextを使用していましたが、うまくいきましたが、より洗練されたソリューションを探していました。乾杯 – Arcane92

関連する問題