2017-06-02 4 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); 

「ブラウン」と「ジャンプ」がありました。XDocumentからのXElementの解析は、以下の3回繰り返されます。

「ジャンプ」のみが必要です。 (孫以外の子のみを意味します)

お願いします。

現時点では、私はLINQではなく "foreach"ループのみを研究しています(私はそれが良いことを知っています)。

よろしくお願いいたします。

[編集]これはどうですか。それは何も発しない。..

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

ヤップ...私はそれを見つけた。それはLINQと混合されていますが、主にそれはforeachです... – Jason

+0

Ahh。コメントありがとうございました。 – 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

「Any」が良好に見えます。ありがとう。 – Jason

関連する問題