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