SeaSide SeaSide - 1 month ago 6x Question

How to get attribute value from XML using VB.NET?

I have the following xml:

<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="" xmlns="">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:name>European Central Bank</gesmes:name>
<Cube time='2016-09-12'>
<Cube currency='USD' rate='1.1226'/>
<Cube currency='JPY' rate='114.38'/>

I want to get attribute value of each currency.
For now I am using this but it doesn't work:

Dim xmlTree1 As New XmlDocument()

Dim currencyUSD As String = xmlTree1.SelectSingleNode("/gesmes:Envelope/Cube/Cube/Cube[@currency='USD']/@rate").Value
Dim currencyJPY As String = xmlTree1.SelectSingleNode("/gesmes:Envelope/Cube/Cube/Cube[@currency='JPY']/@rate").Value


An alternative is to use the awesome Linq-to-XML features of VB.NET (Framework 3.5 and higher):

Imports <xmsns:xref="">


Dim xdoc = XDocument.Load("C:\kursna_standalone\download\eurofxref-daily.xml")
Dim cubes = xdoc.Root.<xref:Cube>.<xref:Cube>
Dim currencyUSD = cubes.Where(Function(x) x.currency = "USD").@rate
Dim currencyJPY = cubes.Where(Function(x) x.currency = "JPY").@rate

(Note: All my VB code examples assume that Option Strict and Option Infer are active).