2013-03-26 49 views
0

这里是XML我处理:LINQ到发生的XML寻找元素如果以后元素存在

enter image description here

而且到目前为止我的代码:

XDocument doc = XDocument.Load(@"C:\Users\morganjo\Desktop\bb-tasks.xml"); 

     var q = from val in doc.Descendants("property") 
       select (string)val.Attribute("value"); 

     foreach (string str in q) 
     { 
      Console.WriteLine(str); 
     } 

这将让我元素值中所有数字的值。我遇到的问题是这样的,如果元素'name'等于'period'或'delay',我只需要值。由于这些发生在价值之后,我不知道如何解决这个问题。

回答

1

属性顺序无关紧要。你可以用它把它的价值和滤芯:

var q = from val in doc.Descendants("property") 
     where (string)val.Attribute("name") == "delay" || (string)val.Attribute("name") == "period" 
     select (string)val.Attribute("value"); 

或者用let关键字,以得到属性值,然后用它两次:

var q = from val in doc.Descendants("property") 
     let name = (string)val.Attribute("name") 
     where name == "delay" || value == "period" 
     select (string)val.Attribute("value"); 
+0

哇,多数民众赞成真棒人,工程巨大。我还是LINQ的新手,这真的有帮助。将尽快接受。 – 2013-03-26 19:45:12