2011-05-31 84 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