2011-04-29 39 views
3

我有一個LINQ查詢我的XML文件,它看起來像這樣查詢XML文件

IEnumerable<XElement> c = from cli in xEl.Elements(ns + "client") 
             where cli.Element(ns+"ID").Value == (((Client)cComboBox.SelectedItem).Id +"") 
             select cli; 

它工作正常.. 接下來我要重複的數據,所以我這樣做

  foreach (XElement el in c) 
      { 

      } 

我的XML文件看起來像這樣

<client> 
    <ID>1</ID> 
    <name>Andrej</name> 

通過迭代,我想提取的客戶價值(ID - > ,名稱 - >安德烈

我的猜測是把el.Element("name").Value在循環的中間,但還是不行...... 噢,順便說一句:我在做這個C#..

我該怎麼辦?

btw2:你可以看到我是新來的LINQ所以我覺得我的方式偏離了軌道與這一個...

任何幫助將appriciated! TNX!

+0

對不起剛清楚你想獲得id = 1或id => 1的元素嗎? – Johnv2020 2011-04-29 12:35:43

回答

2

如果我用這個代碼:

public void Run() 
    { 
     string fileToLoad = this.GetType().Name + ".xml"; 

     XElement root = XElement.Load(fileToLoad); 

     var selected = from cli in root.Elements("client") 
      where cli.Element("ID").Value == "1" 
      select cli; 

     System.Console.WriteLine("Selected:"); 
     foreach (var d in selected) 
      Console.WriteLine("{0}", d.ToString()); 

     System.Console.WriteLine("\nitems:"); 
     foreach (var d in selected) 
     { 
      Console.WriteLine("id: {0}", d.Element("ID")); 
     } 
    } 

而這個源數據:

<root> 
    <client> 
    <ID>1</ID> 
    <name>Andrej</name> 
    </client> 
    <client> 
    <ID>2</ID> 
    <name>William</name> 
    </client> 
    <client> 
    <ID>3</ID> 
    <name>Kate</name> 
    </client> 
</root> 

然後......我得到這樣的結果:

Selected: 
<client> 
    <ID>1</ID> 
    <name>Andrej</name> 
</client> 

items: 
id: <ID>1</ID> 
1

你可以在一個聲明中做到這一點。我在解釋你的陳述。只有選擇真的改變。

var nameIdList = (from cli in client 
where cli.ID == ID 
select new { id=cli.ID, name=cli.name }).ToList(); 
+0

另外我有一個問題,我有XmlNodes,需要轉換爲XmlElements。以下是如何將其添加到Extensions類的好鏈接。 http://blogs.msdn.com/b/ericwhite/archive/2008/12/22/convert-xelement-to-xmlnode-and-convert-xmlnode-to-xelement.aspx – JPM 2011-07-22 20:02:47