2017-06-02 37 views
2
//  <sdl:seg id="1" conf="Translated"> 
//    <sdl:previous origin="source"> 
//      <sdl:value key="created">Quick</sdl:value> 
//      <sdl:value key="modified">Brown</sdl:value></sdl:previous> 
//    <sdl:value key="created">Fox</sdl:value> 
//    <sdl:value key="modified">Jumps</sdl:value></sdl:seg>    

foreach (XElement x in myDoc.Descendants(ns + "seg"))   
    foreach (XElement y in myDoc.Descendants(ns + "value")) 
     foreach (var z in y.Attributes()) 
      if (z.Value == "modified")  
       MessageBox.Show(y.Value); 

我有「布朗」和「跳躍」。XElement從XDocument解析,遠遠低於,重複3

我想只有「跳躍」。 (我的意思是隻有孩子不是孫子的「)

請幫忙。目前,我只爲「foreach」循環而不是LINQ(我知道這很好)學習。

問候。

[編輯]這個怎麼樣。它會發出什麼..

foreach (var x in d.Descendants("seg").Elements("value").Attributes().Some("modified") 
    MessageBox.Show(x.Value); 

[編輯2]

foreach (var x in d.Descendants("seg").Elements("value").Attributes().Where(x => x.Value == "modified")) 
MessageBox.Show(x.Parent.Value); 

[編輯3]

foreach (var x in d.Descendants("seg").Elements("value").Where(x => x.Attribute("key").Value == "modified")) 
MessageBox.Show(x.Value); 
+0

這樣你得到的屬性,而不是元素。 –

+0

Yap ...我找到了。雖然它與LINQ混合使用,但主要是... foreach ... – Jason

+0

啊。再次感謝評論。 – Jason

回答

2

使用Elements而不是Descendants

foreach (XElement x in myDoc.Descendants(ns + "seg").Elements(ns + "value"))   
    foreach (var z in x.Attributes()) 
     if (z.Value == "modified")  
      MessageBox.Show(x.Value); 

一個較短的版本:

foreach (XElement x in myDoc.Descendants(ns + "seg").Elements(ns + "value")) 
    if (x.Attributes().Any(a => a.Value == "modified")) 
     MessageBox.Show(x.Value); 
+0

哦,我的,那太容易了。 – Jason

+2

謝謝。我是一個幽靈。 – Jason

+0

「任何」看起來不錯。謝謝。 – Jason