C# 使用Linq从xml解析内部节点

C# 使用Linq从xml解析内部节点,c#,C#,这个问题是我们的后续问题 当我尝试使用linq读取内部节点时,它不会按预期返回集合,而是只返回一项。请看考试 [Test] public void Should_get_all_items() { var item = "<Item status=\"SUCCESS\""+ " message=\"\">" + "<ItemDate>12/21/2012" +

这个问题是我们的后续问题

当我尝试使用linq读取内部节点时,它不会按预期返回集合,而是只返回一项。请看考试

   [Test]
        public void Should_get_all_items()
        {
            var item = "<Item status=\"SUCCESS\""+
            " message=\"\">" +
            "<ItemDate>12/21/2012" +
            "<ItemType>MyType1" +
            "<ItemUrl title=\"ItemTitle\">http://www.itemurl1.com</ItemUrl>" +
            "</ItemType>" +
            "</ItemDate>" +
            "<ItemDate>12/22/2012" +
            "<ItemType>MyType2" +
            "<ItemUrl title=\"Item2Title\">http://www.itemurl2.com</ItemUrl>" +
            "</ItemType>" +
            "</ItemDate>" +
            "</Item>";

            XDocument xdoc = XDocument.Parse(item);
            var query = from i in xdoc.Descendants("Item")
                        let date = i.Element("ItemDate")
                        let type = date.Element("ItemType")
                        let url = type.Element("ItemUrl")
                        select new ItemDate()
                        {
                            Date = ((XText)date.FirstNode).Value,
                            Type = ((XText)type.FirstNode).Value,
                            Url = (string)url,
                            Title = (string)url.Attribute("title"),
                        };

            var qItems = query.ToList();
            Assert.That(qItems.Count, Is.EqualTo(2));
        }

 public class ItemDate
    {
        public string Date { get; set; }
        public string Type { get; set; }
        public string Url { get; set; }
        public string Title { get; set; }
    }
[测试]
public void应获取所有项()
{
var item=“”+
"12/21/2012" +
“MyType1”+
"http://www.itemurl1.com" +
"" +
"" +
"12/22/2012" +
“MyType2”+
"http://www.itemurl2.com" +
"" +
"" +
"";
XDocument xdoc=XDocument.Parse(项);
var query=来自xdoc.substands(“项”)中的i
let date=i.Element(“ItemDate”)
let type=date.Element(“ItemType”)
让url=type.Element(“ItemUrl”)
选择新项目日期()
{
日期=((XText)Date.FirstNode).Value,
Type=((XText)Type.FirstNode).Value,
Url=(字符串)Url,
Title=(字符串)url.Attribute(“Title”),
};
var qItems=query.ToList();
Assert.That(qItems.Count,Is.EqualTo(2));
}
公共类ItemDate
{
公共字符串日期{get;set;}
公共字符串类型{get;set;}
公共字符串Url{get;set;}
公共字符串标题{get;set;}
}
上面的测试失败了。你知道这里出了什么问题吗?我认为这个名字在这里有点误导,因为我在收集ItemDates

谢谢,
-Mike

测试失败,因为XML只有一个
节点,因此只有一个结果

var items = xdoc.Descendants("ItemDate")
    .Select(e => new ItemDate
    {
        Date = e.FirstNode.ToString(),
        Type = e.Element("ItemType").FirstNode.ToString(),
        Url = e.Element("ItemType").Element("ItemUrl").Value,
        Title = e.Element("ItemType").Element("ItemUrl").Attribute("title").Value
    })
    .ToList();