Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du hämtar värdet för element. Det finns två huvudsakliga sätt att hämta värdet:
Kasta en XElement eller en XAttribute till den önskade typen. Den explicita konverteringsoperatorn konverterar sedan innehållet i elementet eller attributet till den angivna typen och tilldelar det till din variabel.
Använd egenskaperna XElement.Value eller XAttribute.Value. Du kan också ange värdet med hjälp av dessa egenskaper.
Med C#är gjutning i allmänhet den bättre metoden. Om du omvandlar elementet eller attributet till en nullbar värdetyp är koden enklare att skriva när du hämtar värdet för ett element (eller attribut) som kanske inte finns. Det sista exemplet i den här artikeln visar detta. Du kan dock inte ange innehållet i ett element via gjutning, som du kan via XElement.Value egenskapen.
Med Visual Basic är det bättre att använda XElement.Value egenskapen.
Exempel på stränggjutning
Om du vill hämta värdet för ett element omvandlar XElement du objektet till önskad typ. Du kan omvandla ett element till en sträng enligt följande:
XElement e = new XElement("StringElement", "abcde");
Console.WriteLine(e);
Console.WriteLine("Value of e:" + (string)e);
Dim e As XElement = <StringElement>abcde</StringElement>
Console.WriteLine(e)
Console.WriteLine("Value of e:" & e.Value)
Det här exemplet genererar följande utdata:
<StringElement>abcde</StringElement>
Value of e:abcde
Exempel på heltalsomvandling
Du kan också omvandla element till andra datatyper än strängar. Om du till exempel har ett element som innehåller ett heltal kan du omvandla det till int, som du ser i följande kod:
XElement e = new XElement("Age", "44");
Console.WriteLine(e);
Console.WriteLine("Value of e:" + (int)e);
Dim e As XElement = <Age>44</Age>
Console.WriteLine(e)
Console.WriteLine("Value of e:" & CInt(e))
Det här exemplet genererar följande utdata:
<Age>44</Age>
Value of e:44
LINQ till XML tillhandahåller explicita cast-operatorer för följande datatyper: string, bool, bool?, int, int?, uint, uint?, long, long?, ulong, ulong?, float, float?, double, double?, decimal, decimal?, DateTime, DateTime?, TimeSpan, TimeSpan?, GUID och GUID?.
LINQ till XML ger samma cast-operatorer för XAttribute objekt.
Exempel på värdeegenskap
Du kan använda Value egenskapen för att hämta innehållet i ett element:
XElement e = new XElement("StringElement", "abcde");
Console.WriteLine(e);
Console.WriteLine("Value of e:" + e.Value);
Dim e As XElement = <StringElement>abcde</StringElement>
Console.WriteLine(e)
Console.WriteLine("Value of e:" & e.Value)
Det här exemplet genererar följande utdata:
<StringElement>abcde</StringElement>
Value of e:abcde
Exempel på att elementet kanske inte finns
Ibland försöker du hämta värdet för ett element även om du inte är säker på om det finns. I det här fallet, när du tilldelar det gjutna elementet till en nullbar referenstyp eller nullbar värdetyp, om elementet inte finns, är den tilldelade variabeln inställd på null (C#) eller nothing (Visual Basic). Följande kod visar att när elementet kanske inte finns är det enklare att använda gjutning än att använda Value egenskapen.
XElement root = new XElement("Root",
new XElement("Child1", "child 1 content"),
new XElement("Child2", "2")
);
// The following assignments show why it's 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 doesn't exist" : c1);
int? c2 = (int?)root.Element("Child2");
Console.WriteLine("c2:{0}", c2 == null ? "element doesn't exist" : c2.ToString());
string c3 = (string)root.Element("Child3");
Console.WriteLine("c3:{0}", c3 == null ? "element doesn't exist" : c3);
int? c4 = (int?)root.Element("Child4");
Console.WriteLine("c4:{0}", c4 == null ? "element doesn't 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 doesn't 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 doesn't 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 doesn't 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 doesn't exist" : v4.ToString());
Dim root As XElement = <Root>
<Child1>child 1 content</Child1>
<Child2>2</Child2>
</Root>
' The following assignments show why it's easier to use
' casting when the element might or might not exist.
Dim c1 As String = CStr(root.Element("Child1"))
Console.WriteLine("c1:{0}", IIf(c1 Is Nothing, "element doesn't exist", c1))
Dim c2 As Nullable(Of Integer) = CType(root.Element("Child2"), Nullable(Of Integer))
Console.WriteLine("c2:{0}", IIf(Not (c2.HasValue), "element doesn't exist", c2.ToString()))
Dim c3 As String = CStr(root.Element("Child3"))
Console.WriteLine("c3:{0}", IIf(c3 Is Nothing, "element doesn't exist", c3))
Dim c4 As Nullable(Of Integer) = CType(root.Element("Child4"), Nullable(Of Integer))
Console.WriteLine("c4:{0}", IIf(Not (c4.HasValue), "element doesn't exist", c4.ToString()))
Console.WriteLine()
' The following assignments show the required code when using
' the Value property when the attribute might or might not exist.
' Notice that this is more difficult than the casting approach.
Dim e1 As XElement = root.Element("Child1")
Dim v1 As String
If (e1 Is Nothing) Then
v1 = Nothing
Else
v1 = e1.Value
End If
Console.WriteLine("v1:{0}", IIf(v1 Is Nothing, "element doesn't exist", v1))
Dim e2 As XElement = root.Element("Child2")
Dim v2 As Nullable(Of Integer)
If (e2 Is Nothing) Then
v2 = Nothing
Else
v2 = e2.Value
End If
Console.WriteLine("v2:{0}", IIf(Not (v2.HasValue), "element doesn't exist", v2))
Dim e3 As XElement = root.Element("Child3")
Dim v3 As String
If (e3 Is Nothing) Then
v3 = Nothing
Else
v3 = e3.Value
End If
Console.WriteLine("v3:{0}", IIf(v3 Is Nothing, "element doesn't exist", v3))
Dim e4 As XElement = root.Element("Child4")
Dim v4 As Nullable(Of Integer)
If (e4 Is Nothing) Then
v4 = Nothing
Else
v4 = e4.Value
End If
Console.WriteLine("v4:{0}", IIf(Not (v4.HasValue), "element doesn't exist", v4))
Det här exemplet genererar följande utdata:
c1:child 1 content
c2:2
c3:element doesn't exist
c4:element doesn't exist
v1:child 1 content
v2:2
v3:element doesn't exist
v4:element doesn't exist
I allmänhet kan du skriva enklare kod genom att gjuta för att hämta innehållet i element och attribut.