2 Stimmen

Linq lesen XML-Dokument mit fehlenden Knoten

Hallo Ich möchte ein XML-Dokument zu lesen, aber es kann einige der Knoten fehlen und wenn ja, möchte ich einen defualt-Wert für die fehlenden Knoten verwenden.

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

So kann in der obigen nur alert1 existieren oder alle Ausschreibungen oder keine der Ausschreibungen! Ich muss einen Standardwert für alle Knoten verwenden, die nicht vorhanden sind!

Ich dachte, ich könnte Alert3 =c.Element("Alert3").Value.DefaultEmpty("abc") verwenden, aber das funktioniert nicht!

2voto

Marc Gravell Punkte 970173
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"
        };

Und es ist repariert. Das funktioniert auch für Dinge wie (int?) , (DateTime?) über eine Reihe von Konvertierungsoperatoren, die auf den Knoten definiert sind, so dass es einfacher ist, zu schreiben und sicherer in Bezug auf fehlende Daten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X