Linq到Xml选择元素

本文关键字:元素 选择 Xml Linq | 更新日期: 2023-09-27 17:52:57

我有这个xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<Calendar>
    <item id="34">
      <Date>26 Apr</Date>
      <Name>aa</Name>
      <Date>26 Apr</Date>
      <Name>aaa</Name>
      <Date>23 Apr</Date>
      <Name>aaaa</Name>
      <Date>23 Apr</Date>
      <Name>aaaaa</Name>    
    </item>  
    <item id="35">
      <Date>27 Apr</Date>
      <Name>aa</Name>
      <Date>27 Apr</Date>
      <Name>aaa</Name>
      <Date>27 Apr</Date>
      <Name>aaaa</Name>
      <Date>27 Apr</Date>
      <Name>aaaaa</Name>    
    </item>  
</Calendar>

这是我的类

public class Calendar
    {
        public string Name{ get; set; }
        public string Data { get; set; }
    }

listBox.ItemsSource = 
from var in xml.Descendants("item")
orderby Convert.ToInt32(var.Attribute("id").Value) ascending
select new Calendar
   {
        Name= var.Element("Name").Value,
        Data = var.Element("Data ").Value,
};

但是在listBox中,我只有每个项目的第一个日期和名称

Linq到Xml选择元素

class程序{静态void Main(string[] args){

  XDocument xml =
    XDocument.Load(
      @"Path to your xml");
  var q = from x in xml.Descendants("item")
          orderby Convert.ToInt32(x.Attribute("id").Value) ascending
          select new Calendar
                   {
                     Name = x.Elements("Name").Select(a => a.Value).ToList<String>(),
                     Date = x.Elements("Date").Select(a => a.Value).ToList<String>()
                   };
  List<Calendar> calendars = q.ToList<Calendar>();
}
public class Calendar
{
  public List<String> Name { get; set; }
  public List<String> Date { get; set; }  
} 

}

XElement.Element(elementName)只获取与elementName匹配的第一个元素。尝试不同的方法,使用XElement.Elements(elementName)