Hämta ett enda attribut (LINQ till XML)

Den här artikeln beskriver hur du hämtar ett enda attribut för ett element, med tanke på attributnamnet. Detta är användbart för att skriva frågeuttryck där du vill hitta ett element som har ett visst attribut.

Metoden Attribute för XElement klassen returnerar XAttribute med det angivna namnet.

Exempel: Hämta attributvärden med tanke på element- och attributnamnen

I följande exempel används XElement metoden för att skapa ett element med namnet PhoneNumbers. Den hittar sedan alla underordnade element med namnet Phone och använder Attribute för varje metod för att hämta och mata ut värdet för attributet med namnet type:

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

Det här exemplet genererar följande utdata:

home
work

Exempel: Hämta ett attributvärde med en cast

Du kan hämta värdet för ett attribut genom att casta det, precis som med XElement objekt. Följande exempel visar detta:

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

Det här exemplet genererar följande utdata:

home
work

LINQ till XML tillhandahåller explicita cast-operatorer för XAttribute klassen till string, bool, bool?, int, int?, longulonguintuint?long?, ulong?, float?double?decimal?doubleDateTimedecimalfloat, DateTime?, TimeSpan, TimeSpan?, GUIDoch .GUID?

Exempel: Casta för ett attribut i ett namnområde

I följande exempel visas samma kod för ett attribut som finns i ett namnområde. Mer information finns i Översikt över namnområden.

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

Det här exemplet genererar följande utdata:

home
work

Se även