2011-11-07 7 views
1

Webサービスから受け取ったXMLを解析中に問題が発生しています。linqをxmlに解析して問題が発生しました

XMLは、非常にシンプルになります。

<Result xsi:schemaLocation="urn:yahoo:developer http://developer.yahooapis.com/TimeService/V1/GetTimeResponse.xsd" type="web"><Timestamp>1320677359</Timestamp></Result> 

しかし、私はノーリターンの結果を取得していない午前のコードを次でそれを解析しようとします。

XDocument doc = XDocument.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");   

      var datestamp = from ds in doc.Descendants("Result") 
          select new { currentstamp = ds.Element("Timestamp").Value }; 

これを解析する方法はありますか?事前

+0

あまり使われていないので、XMLのサンプルを含めることはできますか? –

+0

はい、元のメッセージで、コードタグで囲まれた最初の行が実際のXMLです。 – Dmitris

+0

ああ、私は上にスクロールする必要があります:-) –

答えて

3

にあなたはカップルの問題を抱えている

ありがとう:まず、結果ノードが子孫ではありません。それは根です。次に、LINQ to XMLを使用するときに最も一般的な問題に遭遇しました。名前空間を忘れてしまいました。以下は、必要なものを与えるはずです:

XElement doc = XElement.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");    
XNamespace ns = "urn:yahoo:developer"; 
var datestamp = from ds in doc.DescendantsAndSelf(ns + "Result") 
       select new { currentstamp = ds.Element(ns + "Timestamp").Value }; 

注:これはIEnumerableを生成します。日付スタンプだけが必要な場合は、代わりにFirstOrDefaultを使用することを検討してください。あなたは、次の操作を行って、これは簡単にすることができるかもしれ:

XElement doc = XElement.Load("http://developer.yahooapis.com/TimeService/V1/getTime?appid=StackSolution");    
XNamespace ns = "urn:yahoo:developer"; 
var datestamp = doc.Element(ns + "Timestamp").Value; 
+0

魅力のように働いて、まさに私が必要なものです。どうもありがとうございます! – Dmitris

1

この方法はLocalName(修飾されていない識別子)を使用して、名前空間の問題を回避することができます。

var datestamp = doc.Root.Descendants().Where(c => c.Name.LocalName.Equals("Timestamp")).FirstOrDefault().FirstNode.ToString() 
関連する問題