2011-02-01 17 views
0

私はこのXML文書を持っています(このスキーマを構成していません)。私は0アイテムの代わりのリストを返すよLinq to XML - 私のクエリで何が問題なのですか

XDocument doc = XDocument.Load(@"C:\Test.xml"); 
var q = from d in doc.Descendants("summary") 
     where d.Element("item").Attribute("key").Value == "SomeAttribute" 
     select new { LengendKey = d.Attribute("key").Value, ElapsedTime = d.Element("item").Value }; 

<?xml version="1.0" encoding="utf-8" ?> 
<rsp stat="ok"> 
<wmversion>3</wmversion> 
<summary day="362" > 
    <item key="SomeAttribute"> 
    <item key="1">0.33</item> 
    <item key="10">3.32</item> 
    <item key="11">0.23</item> 
    <item key="12">1.06</item> 
    <item key="13">0.09</item> 
    <item key="2">0.35</item> 
    <item key="3">0.72</item> 
    <item key="4">0.61</item> 
    <item key="5">1.01</item> 
    <item key="6">0.10</item> 
    <item key="7">0.50</item> 
    <item key="8">1.27</item> 
    <item key="9">3.01</item> 
    </item> 
... 

は今、私のようなこの情報を照会しようとしています。誰でも私がここで間違っていることを知っていますか?

おかげで、ビル・N

答えて

0

私はそれはあなたがやろうとしているものは本当にはっきりしていないと思います。ここにあなたのコードで

var q = from d in doc.Descendants("summary") 
where d.Element("item").Attribute("key").Value == "SomeAttribute" 
select new { LengendKey = d.Attribute("key").Value, ElapsedTime = d.Element("item").Value } 

d自体は正しい属性を持つ「アイテム」要素を持っている「概要」のすべての子孫です。

投稿したXMLには、「要約」の子孫が1つしかなく、正しい属性を持つ「アイテム」の子はありません。

私はまた、 - ここではリーフノード(キー1,2,3など)になっています - ステートメントの最初の部分に適合するか、またはそれの下にある 'item'要素はステートメントの2番目の部分に合っていますか?同時に両方をすることはできません。

おそらく

// first get the summary; it is a descendant of doc & there's only one. 
var summary = doc.Descendants("summary").Single(); 

// get the element with 'SomeAttribute' from the summary; 
// if there's only even going to be one then you can call Single here 
var item = summary.Elements().Single(e => e.Name == "item" 
    && e.Attribute("key").Value == "SomeAttribute"); 

var q = item.Elements().Select(e => new 
    { LengendKey = e.Attribute("key").Value, ElapsedTime = e.Value }); 
をしたいです
1
var q = doc.Descendants("summary") 
      .Where(x => x.Element("item").Attribute("key").Value == "SomeAttribute") 
      .SelectMany(x => x.Descendants()) 
      .Select(x => new 
       { LengendKey = x.Attribute("key").Value, ElapsedTime = x.Value }); 

はあなたのためにこの仕事をしていますか?または何か他のものをお探しですか?

-1

これは動作します:

var q = doc.Descendants("summary").Descendants("item").Descendants("item") 
    .Select (d => new { LengendKey = d.Attribute("key").Value, ElapsedTime = d.Value }); 
関連する問題