Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.


Share this Page URL
Help

XML > 184 XML-Dokumente beim Einlesen gegen ein XML-Schema (oder DTD) prüfen - Pg. 471

>> XML // Leere Elemente lassen sich nicht direkt in einen Nullable-Wert // konvertieren. Ein LINQ-to-XML-Trick hilft aber: value2 = (int?)rootElement.Elements("value2").Where( .Where( e => String.IsNullOrEmpty(e.Value) == false).FirstOrDefault(); Console.WriteLine("value2: " + value2); // Elemente, die mit xsi:nil gekennzeichnet sind, lassen sich ebenfalls (noch) // nicht in Nullwerte konvertieren, weil XElement xsi:nil (noch) nicht // berücksichtigt. Hier hilft wieder ein LINQ-to-XML-Trick: value3 = (int?)rootElement.Elements("value3").Where( .Where( e => ((bool?)e.Attribute(xsi + "nil")) != true).FirstOrDefault(); Console.WriteLine("value3: " + value3); Listing 314: Lesen von Elementen, die nicht vorhanden oder leer sein können, mit dem X DOM (Forts.) 471 Der LINQ-to-XML-Trick beim Lesen leerer Elemente fragt die Elemente mit dem angegebenen Namen ab, die entweder nicht leer sind oder deren xsi:nil -Attribut nicht true verwaltet. Beachten Sie, dass Sie dazu Elements verwenden müssen, da Where für die Element -Methode nicht definiert ist. Dies führt natürlich zu einem logischen Problem, falls es mehrere Elemente mit dem angegebenen Namen gibt. Für den Fall, dass es nur ein Element gibt, funktioniert die Abfrage aber einwandfrei. Beachten Sie ebenfalls, dass der Lambda-Ausdruck, der auf das nil - Attribut überprüft, den Wert dieses Attributs nach bool? konvertiert und nicht nach bool . Der Grund dafür ist, dass das nil -Attribut ja auch fehlen kann. XML