0

この質問は、このからのフォローアップです。

linq を使用して内部ノードを読み取ろうとすると、期待どおりにコレクションが返されず、アイテムが 1 つしか返されません。テストをご覧ください。

   [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; }
    }

上記のテストは失敗します。ここで何がうまくいかないのですか? ItemDates のコレクションの後なので、ここでは Item という名前が少し誤解を招くと思います

ありがとう -マイク

4

2 に答える 2

1
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();
于 2012-12-14T12:30:11.607 に答える
0

ItemXML にはノードが 1 つしかなく、結果も 1つしかないため、テストは失敗します。

于 2012-12-14T12:24:25.047 に答える