Vorgehensweise: Abrufen des Werts eines Elements (LINQ to XML) (C#)How to: Retrieve the Value of an Element (LINQ to XML) (C#)

In diesem Thema wird gezeigt, wie Sie den Wert von Elementen abrufen können.This topic shows how to get the value of elements. Im Wesentlichen gibt es dafür zwei Möglichkeiten.There are two main ways to do this. Die eine Möglichkeit besteht darin, ein XElement oder ein XAttribute in den gewünschten Typ umzuwandeln.One way is to cast an XElement or an XAttribute to the desired type. Der explizite Konvertierungsoperator wandelt dann den Inhalt des Elements oder Attributs in den angegebenen Typ um und weist ihn Ihrer Variable zu.The explicit conversion operator then converts the contents of the element or attribute to the specified type and assigns it to your variable. Die andere Möglichkeit besteht darin, die XElement.Value-Eigenschaft oder die XAttribute.Value-Eigenschaft zu verwenden.Alternatively, you can use the XElement.Value property or the XAttribute.Value property.

Bei Verwendung von C# ist die Umwandlung aber in der Regel der bessere Ansatz.With C#, however, casting is generally the better approach. Wenn Sie das Element oder Attribut in einen Typ umwandeln, der NULL-Werte zulässt, ist der Code für das Abrufen des Werts eines Elements (oder Attributs), das vorhanden oder nicht vorhanden ist, einfacher zu schreiben.If you cast the element or attribute to a nullable type, the code is simpler to write when retrieving the value of an element (or attribute) that might or might not exist. Dies wird im letzten Beispiel in diesem Thema gezeigt.The last example in this topic demonstrates this. Während Sie bei der Verwendung der XElement.Value-Eigenschaft den Inhalt des Elements sehen können, ist dies beim Umwandeln nicht möglich.However, you cannot set the contents of an element through casting, as you can through XElement.Value property.

BeispielExample

Zum Abrufen des Werts eines Elements wandeln Sie einfach nur das XElement-Objekt in den gewünschten Typ um.To retrieve the value of an element, you just cast the XElement object to your desired type. Das folgende Beispiel zeigt, wie Sie ein Element in eine Zeichenfolge umwandeln können:You can always cast an element to a string, as follows:

XElement e = new XElement("StringElement", "abcde");  
Console.WriteLine(e);  
Console.WriteLine("Value of e:" + (string)e);  

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

<StringElement>abcde</StringElement>  
Value of e:abcde  

BeispielExample

Sie können Elemente auch in andere Typen als Zeichenfolgen umwandeln.You can also cast elements to types other than string. Wenn Sie z. B. ein Element haben, das eine ganze Zahl enthält, können Sie das Element, wie im folgenden Code gezeigt, in den Typ int umwandeln:For example, if you have an element that contains an integer, you can cast it to int, as shown in the following code:

XElement e = new XElement("Age", "44");  
Console.WriteLine(e);  
Console.WriteLine("Value of e:" + (int)e);  

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

<Age>44</Age>  
Value of e:44  

LINQ to XML bietet explizite Umwandlungsoperatoren für die folgenden Datentypen: string, bool, bool?, int, int?, uint, uint?, long, long?, ulong, ulong?, float, float?, double, double?, decimal, decimal?, DateTime, DateTime?, TimeSpan, TimeSpan?, GUID und GUID?. provides explicit cast operators for the following data types: string, bool, bool?, int, int?, uint, uint?, long, long?, ulong, ulong?, float, float?, double, double?, decimal, decimal?, DateTime, DateTime?, TimeSpan, TimeSpan?, GUID, and GUID?.

LINQ to XML stellt dieselben Typumwandlungsoperatoren für XAttribute-Objekte bereit. provides the same cast operators for XAttribute objects.

BeispielExample

Zum Abrufen des Inhalts eines Elements können Sie die Value-Eigenschaft verwenden:You can use the Value property to retrieve the contents of an element:

XElement e = new XElement("StringElement", "abcde");   
Console.WriteLine(e);  
Console.WriteLine("Value of e:" + e.Value);  

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

<StringElement>abcde</StringElement>  
Value of e:abcde  

BeispielExample

Es kann vorkommen, dass Sie versuchen möchten, den Wert eines Elements abzurufen, von dem Sie gar nicht genau wissen, ob es tatsächlich existiert.Sometimes you try to retrieve the value of an element even though you are not sure it exists. Wenn Sie in einem solchen Fall das umgewandelte Element einem Typ zuweisen, der NULL-Werte zulässt (entweder eine string oder einer der Typen in .NET Framework.NET Framework, der NULL-Werte zulässt) und wenn das Element nicht existiert, wird die zugewiesene Variable einfach auf null gesetzt.In this case, when you assign the casted element to a nullable type (either string or one of the nullable types in the .NET Framework.NET Framework), if the element does not exist the assigned variable is just set to null. Der folgende Code zeigt, dass in den Fällen, in denen nicht klar ist, ob das Element existiert oder nicht, das Arbeiten mit der Umwandlung einfacher ist als die Verwendung der Value-Eigenschaft.The following code shows that when the element might or might not exist, it is easier to use casting than to use the Value property.

XElement root = new XElement("Root",  
    new XElement("Child1", "child 1 content"),  
    new XElement("Child2", "2")  
);  

// The following assignments show why it is easier to use  
// casting when the element might or might not exist.  

string c1 = (string)root.Element("Child1");  
Console.WriteLine("c1:{0}", c1 == null ? "element does not exist" : c1);  

int? c2 = (int?)root.Element("Child2");  
Console.WriteLine("c2:{0}", c2 == null ? "element does not exist" : c2.ToString());  

string c3 = (string)root.Element("Child3");  
Console.WriteLine("c3:{0}", c3 == null ? "element does not exist" : c3);  

int? c4 = (int?)root.Element("Child4");  
Console.WriteLine("c4:{0}", c4 == null ? "element does not exist" : c4.ToString());  

Console.WriteLine();  

// The following assignments show the required code when using  
// the Value property when the element might or might not exist.  
// Notice that this is more difficult than the casting approach.  

XElement e1 = root.Element("Child1");  
string v1;  
if (e1 == null)  
    v1 = null;  
else  
    v1 = e1.Value;  
Console.WriteLine("v1:{0}", v1 == null ? "element does not exist" : v1);  

XElement e2 = root.Element("Child2");  
int? v2;  
if (e2 == null)  
    v2 = null;  
else  
    v2 = Int32.Parse(e2.Value);  
Console.WriteLine("v2:{0}", v2 == null ? "element does not exist" : v2.ToString());  

XElement e3 = root.Element("Child3");  
string v3;  
if (e3 == null)  
    v3 = null;  
else  
    v3 = e3.Value;  
Console.WriteLine("v3:{0}", v3 == null ? "element does not exist" : v3);  

XElement e4 = root.Element("Child4");  
int? v4;  
if (e4 == null)  
    v4 = null;  
else  
    v4 = Int32.Parse(e4.Value);  
Console.WriteLine("v4:{0}", v4 == null ? "element does not exist" : v4.ToString());  

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

c1:child 1 content  
c2:2  
c3:element does not exist  
c4:element does not exist  

v1:child 1 content  
v2:2  
v3:element does not exist  
v4:element does not exist  

In der Regel können Sie einfacheren Code schreiben, wenn Sie zum Abrufen des Inhalts von Elementen und Attributen die Umwandlung verwenden.In general, you can write simpler code when using casting to retrieve the contents of elements and attributes.

Siehe auchSee Also

LINQ to XML Axes (C#) (LINQ to XML-Achsen (C#))LINQ to XML Axes (C#)