在解析多个子标记后,IEnumerable引用未设置为对象?

时间:2011-11-07 20:31:16

标签: .net xml linq

我有一些XML:

<messages>
    <message>
        <meta appid="1112" date="20111028" msgid="4498016" msgno="855" permlinkdate="2011-10-28">
            <summary>RedBook is a fun book</summary>
        </meta>
        <ISBN>1234123412123</ISBN>
    </message>
    <message>
        <meta appid="1112" date="20111028" msgid="4498016" msgno="855" permlinkdate="2007-1-30">
            <summary>BlueBook is a good book</summary>
        </meta>
        <ISBN>123412341234</ISBN>
    </message>
</messages>

我有一些Linq to XML来操作这个XML:

public static List<ReviewDTC> GetReviews()
{
    XElement xmlDoc = XElement.Load(@"C:\Users\inelson\Desktop\fiddle.xml");

    var dtos = from item in xmlDoc.Descendants("message")
               select new ReviewDTC()
               {
                   PubDate = item.Element("meta").Attribute("permlinkdate").Value,
                   Summary = item.Element("summary").Value,
                   Isbn = item.Element("ISBN").Value
               };

    List<ReviewDTC> reviews = new List<ReviewDTC>();
    reviews = dtos.ToList();

    return reviews;
}

上述代码的目的是为每个消息节点解析文档,并为每个消息节点创建一个具有该节点的子元素(和一个属性)的对象。每个对象都被添加到集合中,依此类推..

在调试此代码时,我在var dtos =之后放置一个BP,并且它声明在实例化一个新的ReviewDTC对象时dtos没有被设置为对象的实例。解析器是否无法读取Meta,Summary或​​ISBN来构建对象?怎么回事?

我很感激,很开心。

1 个答案:

答案 0 :(得分:2)

summary元素位于meta元素下。

试试这个:

Summary = item.Element("meta").Element("summary").Value,