Linq读取缺少节点的XML文档

时间:2010-10-28 08:29:40

标签: c# linq .net-4.0 linq-to-xml

您好    我想读取一个XML文档,但它可能缺少某些节点,如果是这样,我想为缺少的节点使用defualt值。

XDocument xmlDoc = XDocument.Load(Path.Combine(Application.StartupPath, "queues.xml"));
        var q = from c in xmlDoc.Root.Descendants("Queue")
                select new Queue
                {
                    Alert1 =c.Element("Alert1").Value,
                    Alert2 = c.Element("Alert2").Value,
                    Alert3 =c.Element("Alert3").Value
                };

        var queryAsList = new BindingList<Queue>(q.ToList());


    class Queue
{
    public string Alert1 { get; set; }
    public string Alert2 { get; set; }
    public string Alert3 { get; set; }
}

所以在上面只有alert1可能存在或所有警报或没有任何警报!我需要对任何不存在的节点使用默认值!

我以为我可以Alert3 = c.Element(“Alert3”)。Value.DefaultEmpty(“abc”)但这不起作用!

1 个答案:

答案 0 :(得分:2)

XDocument xmlDoc = XDocument.Load(Path.Combine(Application.StartupPath, "queues.xml"));
var q = from c in xmlDoc.Root.Descendants("Queue")
        select new Queue
        {
            Alert1 = (string)c.Element("Alert1") ?? "default 1",
            Alert2 = (string)c.Element("Alert2") ?? "default 2",
            Alert3 = (string)c.Element("Alert3") ?? "default 3"
        };

它是固定的。通过节点上定义的一系列转换运算符,这也适用于(int?)(DateTime?)之类的内容,因此更容易编写更安全的重新丢失数据。