LINQ to XML Schnipsel
LINQ (Language INtegrated Query) ist ein neues Feature von .NET 3.5 und eine verdammt feine Sache, wenn man damit umgehen kann.
Hier ein paar Praxisbeispiele für LINQ to XML, also die datenbankähnliche Abfrage von XML-Dokumenten:
Herauslesen einzelner Werte aus einem namespacebehafteten XML-Dokument
Gegeben sei folgendes XML:
<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Result ID="1,Update">
<ErrorCode>0x80020005</ErrorCode>
<ErrorText>The operation failed because an unexpected error occurred. (Result Code: 0x80020005)</ErrorText>
</Result>
</Results>
Besonderheit: Das XML-Dokument hat einen Namespace, der im LINQ-Code berücksichtigt werden muss. Es genügt also nicht den Descendants("ErrorCode") zu schreiben, sondern es muss ein XName-Objekt erzeugt werden das ebenfalls den Namespace berücksichtigt. Das geht u.a. mit der Factory-Methode XName.Get("{Namespace}|ElementName").
Das XML befindet sich in einem XDocument-Objekt namens xdoc.
Herauslesen des ErrorCode:
string errorCode = ( from x
in xdoc.Descendants(XName.Get("{http://schemas.microsoft.com/sharepoint/soap/}ErrorCode"))
select x.Value
).First();
Ergebnis: 0x80020005