2011-05-31 127 views
1

我想從XML文件中獲取一些值,並使用LINQ將它們插入到ListBox中。我錯在哪裏?用LINQ解析XML問題

<?xml version="1.0" encoding="UTF-8"?> 
<tells> 
    <defindividual name="name1"/> 
    <instanceof> 
     <individual name="name1"/> 
     <catom name="value"/> 
    </instanceof> 

    <defindividual name="name2"/> 
    <instanceof> 
     <individual name="name2"/> 
     <catom name="value"/> 
    </instanceof> 

    <defindividual name="name3"/> 
    <instanceof> 
     <individual name="name3"/> 
     <catom name="otherValue"/> 
    </instanceof> 
</tells> 

代碼隱藏:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    XDocument owlXML = XDocument.Load(Server.MapPath("App_Data\\myFile.xml")); 

    var items = from item in owlXML.Descendants("instanceof") 
       where item.Element("catom").Attribute("name").Value == "value" 
       select new 
       { 
        catom = item.Element("catom").Attribute("name").Value 
       }; 

    foreach (var item in items) 
    { 
     //ListBox1.DataSource = item; 
     //ListBox1.DataBind(); 

     ListBox1.Items.Add(item.catom); 
    }   
} 
+1

而not_工作什麼_does? – abatishchev 2011-05-31 14:42:26

+0

問題是我的ListBox1始終是空的。我試圖用List <>項填充它,它工作,但是當我嘗試用IEnumerable項填充它時,沒有任何反應。 – nyxz 2011-05-31 14:54:44

+0

我更新了添加'ToArray()'的答案。您也可以使用ToList(),但不需要產生的開銷。 – abatishchev 2011-05-31 15:02:28

回答

0
var names = from item in owlXML.Descendants("instanceof") 
      let name = item.Element("catom").Attribute("name") // cache 
      where name.Value == "value" 
      select name; 

foreach (var name in names.ToArray()) 
{ 
    ListBox1.Items.Add(name); 
} 

var items = from item in owlXML.Descendants("instanceof") 
      let name = item.Element("catom").Attribute("name") // cache 
      where name.Value == "value" 
      select new { catom = name }; // if ListBox is configured to field="catom" 

ListBox1.DataSource = items.ToArray(); // items! 
ListBox1.DataBind(); 
+0

我在這個聲明中得到一個錯誤 where name ==「value」 – nyxz 2011-05-31 15:02:19

+0

@Maistora:我更新了我的答案 – abatishchev 2011-05-31 15:03:49

+0

謝謝你的回答! – nyxz 2011-05-31 15:39:07