You can use StartsWith on element name:
Class Car
Public nr As String
Public make As String
Public type As String
Public model As String
End Class
Sub Main()
Dim cars = <cars>
<nr1>0 445 110 002</nr1>
<make1>FIAT</make1>
<type1>CRI-1.0 </type1>
<model1>DUCATO 2.2 </model1>
<nr2>0 445 110 007</nr2>
<make2>PSA FIAT</make2>
<type2>CRI-1.0 </type2>
<model2>SCUDO 2.0JTD </model2>
<nr3>0 445 110 007</nr3>
<make3>PSA FIAT</make3>
<type3>CRI-1.0 </type3>
<model3>SCUDO 2.0JTD </model3>
</cars>
Dim carsList As New List(Of Car)
Dim newCar As New Car
For Each el As XElement In cars.Elements
If el.Name.ToString.StartsWith("nr") Then
If newCar.nr IsNot Nothing Then
carsList.Add(newCar)
newCar = New Car
End If
newCar.nr = el.Value.ToString
End If
If el.Name.ToString.StartsWith("make") Then _
newCar.make = el.Value.ToString
If el.Name.ToString.StartsWith("type") Then _
newCar.type = el.Value.ToString
If el.Name.ToString.StartsWith("model") Then _
newCar.model = el.Value.ToString
Next
carsList.Add(newCar)
End Sub
EDIT: Display all car numbers in one line via comma.
With LINQ:
Dim carNumbersOnly As String =
String.Join(", ", carsList.Select(Function(car) car.nr))
Without LINQ:
Private Function CarsToString(cars As IEnumerable(Of Car)) As String
Dim numbersList As New List(Of String)
For Each c As Car In cars
numbersList.Add(c.nr)
Next
Return String.Join(", ", numbersList)
End Function
Usage:
Dim carNumbersOnly As String = CarsToString(carsList)
You can assign to TextBox.Text instead of a string, the above is for demo purposes only.