Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan szerezheti be az elemek értékét. Az érték lekérésének két fő módja van:
Alakítson egy XElement vagy egy XAttribute elemet a kívánt típusra. A explicit konverziós operátor ezután átalakítja az elem vagy attribútum tartalmát a megadott típusra, és hozzárendeli azt a változóhoz.
Használja a XElement.Value vagy XAttribute.Value tulajdonságot. Az értéket ezen tulajdonságok használatával is beállíthatja.
A C# használata esetén általában a casting a jobb módszer. Ha az elemet vagy attribútumot null értékű típusra öntötte, a kód egyszerűbben írható le egy olyan elem (vagy attribútum) értékének lekérésekor, amely esetleg nem létezik. A cikk utolsó példája ezt mutatja be. Az elemek tartalmát azonban nem állíthatja be az öntéssel, ahogyan azt a tulajdonságon keresztül XElement.Value is megteheti.
A Visual Basic használatával a jobb módszer a XElement.Value tulajdonság használata.
Példa sztringbeosztásra
Egy elem értékének lekéréséhez állítsa az objektumot a XElement kívánt típusra. Egy elemet a következőképpen helyezhet el egy sztringben:
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)
Ez a példa a következő kimenetet hozza létre:
<StringElement>abcde</StringElement>
Value of e:abcde
Egész szám típuskonverziós példa
Az elemeket a karakterláncon kívül más típusokra is konvertálhatja. Például, ha van egy egész számot tartalmazó elem, azt int-vá kasztolhatja, ahogy ez a következő kódban látható:
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))
Ez a példa a következő kimenetet hozza létre:
<Age>44</Age>
Value of e:44
A LINQ to XML kifejezett típuskonverziós operátorokat biztosít a következő adattípusokhoz: string, bool, bool?, int, int?, uint, uint?, long, long?, ulong, ulong?, float, float?, double, double?, decimal, decimal?, DateTime, DateTime?, TimeSpan, TimeSpan?, GUID és GUID?.
A LINQ to XML ugyanazokat a kasztoló operátorokat biztosítja az XAttribute objektumok számára.
Példa értéktulajdonságra
A tulajdonság használatával Value lekérheti egy elem tartalmát:
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)
Ez a példa a következő kimenetet hozza létre:
<StringElement>abcde</StringElement>
Value of e:abcde
Előfordulhat, hogy az elem nem létezik – ez egy példa.
Néha megpróbáljuk lekérni egy elem értékét, még akkor is, ha nem biztos benne, hogy létezik-e. Ebben az esetben, amikor a kastolt elemet egy null értékű hivatkozási típushoz vagy null értékű értéktípushoz rendeli hozzá, és ha az elem nem létezik, a hozzárendelt változó null értékre lesz beállítva (C#) vagy nothing (Visual Basic). Az alábbi kód azt mutatja, hogy ha az elem nem létezik, egyszerűbb az öntés használata, mint a Value tulajdonság használata.
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))
Ez a példa a következő kimenetet hozza létre:
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
Általában egyszerűbb kódot írhat, ha az elemek és attribútumok tartalmának lekéréséhez típuskonverziót (casting) alkalmaz.