Linq читает XML документ с отсутствующими узлами - PullRequest
2 голосов
/ 28 октября 2010

Привет Я хочу прочитать документ XML, но в нем могут отсутствовать некоторые узлы, и в этом случае я хочу использовать значение по умолчанию для отсутствующих узлов.

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 Ответ

2 голосов
/ 28 октября 2010
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?) через ряд операторов преобразования, определенных на узлах, поэтому проще писать и более безопасные и отсутствующие данные.

...