Export (0) Print
Expand All

How to: Retrieve a Single Attribute (LINQ to XML)

This topic explains how to retrieve a single attribute of an element, given the attribute name. This is useful for writing query expressions where you want to find an element that has a particular attribute.

The Attribute method of the XElement class returns the XAttribute with the specified name.

The following example uses the Attribute method.

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

This example finds all the descendants in the tree named Phone, and then finds the attribute named type.

This code produces the following output:

home
work

If you want to retrieve the value of the attribute, you can cast it, just as you do for with XElement objects. The following example demonstrates this.

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

This code produces the following output:

home
work

LINQ to XML provides explicit cast operators for the XAttribute class to string, bool, bool?, int, int?, uint, uint?, long, long?, ulong, ulong?, float, float?, double, double?, decimal, decimal?, DateTime, DateTime?, TimeSpan, TimeSpan?, GUID, and GUID?.

The following example shows the same code for an attribute that is in a namespace. For more information, see Working with XML Namespaces.

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

This code produces the following output:

home
work
Show:
© 2014 Microsoft