Eén kenmerk ophalen (LINQ naar XML)

In dit artikel wordt uitgelegd hoe u één kenmerk van een element ophaalt, op basis van de kenmerknaam. Dit is handig voor het schrijven van query-expressies waar u een element met een bepaald kenmerk wilt zoeken.

De Attribute methode van de XElement klasse retourneert de XAttribute met de opgegeven naam.

Voorbeeld: kenmerkwaarden ophalen, op basis van de element- en kenmerknamen

In het volgende voorbeeld wordt de methode gebruikt om een element met de XElement naam PhoneNumberste maken. Vervolgens worden alle onderliggende elementen met de naam gevonden Phone en wordt voor elk element de Attribute methode gebruikt om de waarde van het kenmerk met de naam typeop te halen en uit te voeren:

XElement cust = new XElement("PhoneNumbers",
    new XElement("Phone",
        new XAttribute("type", "home"),
        "555-555-5555"),
    new XElement("Phone",
        new XAttribute("type", "work"),
        "555-555-6666")
);
IEnumerable<XElement> elList =
    from el in cust.Descendants("Phone")
    select el;
foreach (XElement el in elList)
    Console.WriteLine((string)el.Attribute("type"));
Dim cust As XElement = <PhoneNumbers>
                           <Phone type="home">555-555-5555</Phone>
                           <Phone type="work">555-555-6666</Phone>
                       </PhoneNumbers>
Dim elList = From el In cust...<Phone>
For Each e As XElement In elList
    Console.WriteLine(e.@type)
Next

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

home
work

Voorbeeld: Een kenmerkwaarde ophalen met een cast

U kunt de waarde van een kenmerk ophalen door het te casten, net zoals bij XElement objecten. In het volgende voorbeeld ziet u dit:

XElement cust = new XElement("PhoneNumbers",
    new XElement("Phone",
        new XAttribute("type", "home"),
        "555-555-5555"),
    new XElement("Phone",
        new XAttribute("type", "work"),
        "555-555-6666")
);
IEnumerable<XElement> elList =
    from el in cust.Descendants("Phone")
    select el;
foreach (XElement el in elList)
    Console.WriteLine((string)el.Attribute("type"));
Dim cust As XElement = <PhoneNumbers>
                           <Phone type="home">555-555-5555</Phone>
                           <Phone type="work">555-555-6666</Phone>
                       </PhoneNumbers>
Dim elList As IEnumerable(Of XElement) = _
    From el In cust...<Phone> _
    Select el
For Each el As XElement In elList
    Console.WriteLine(el.@type)
Next

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

home
work

LINQ naar XML biedt expliciete cast-operators voor de XAttribute klasse aan string, bool, , bool?, uint?TimeSpanTimeSpan?floatlonguintlong?int?ulongintulong?float?DateTimedecimal?DateTime?double?decimaldoubleen . GUIDGUID?

Voorbeeld: Cast voor een kenmerk in een naamruimte

In het volgende voorbeeld ziet u dezelfde code voor een kenmerk in een naamruimte. Zie het overzicht van naamruimten voor meer informatie.

XNamespace aw = "http://www.adventure-works.com";
XElement cust = new XElement(aw + "PhoneNumbers",
    new XElement(aw + "Phone",
        new XAttribute(aw + "type", "home"),
        "555-555-5555"),
    new XElement(aw + "Phone",
        new XAttribute(aw + "type", "work"),
        "555-555-6666")
);
IEnumerable<XElement> elList =
    from el in cust.Descendants(aw + "Phone")
    select el;
foreach (XElement el in elList)
    Console.WriteLine((string)el.Attribute(aw + "type"));
Imports <xmlns:aw="http://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim cust As XElement = _
            <aw:PhoneNumbers>
                <aw:Phone aw:type="home">555-555-5555</aw:Phone>
                <aw:Phone aw:type="work">555-555-6666</aw:Phone>
            </aw:PhoneNumbers>
        Dim elList As IEnumerable(Of XElement) = _
            From el In cust...<aw:Phone> _
            Select el
        For Each el As XElement In elList
            Console.WriteLine(el.@aw:type)
        Next
    End Sub
End Module

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

home
work

Zie ook