VB.Net/XML LINQ/XElement
Содержание
- 1 Add 5 new green Fords to the incoming document
 - 2 Adding XElement to XElement
 - 3 Add the new node to the bottom of the XML tree
 - 4 After elements
 - 5 Before elements
 - 6 Build an XElement from string
 - 7 Convert comma separated value to Xml
 - 8 Create an in-memory XML document
 - 9 Create a query to convert the xml data into fields delimited by quotes and commas.
 - 10 Create a single XML element
 - 11 Enumerate over the array to build an XElement
 - 12 First Last Example
 - 13 FirstLast Or Default Example
 - 14 First name element has attributes
 - 15 First name tag has child elements
 - 16 FirstName tag"s parent has child elements
 - 17 Get child elements by name directly
 - 18 Get first descendant
 - 19 Get value of each color using indexer
 - 20 Is FirstName tag empty?
 - 21 Is idperson tag empty?
 - 22 Load the Employees.xml and store the contents into an XElement object.
 - 23 Remove content from XElement
 - 24 Remove from XElement
 - 25 Remove the 4th Employee element.
 - 26 Replace content from XElement
 - 27 Set new value to Xml document
 - 28 The Root property returns the top-level XElement
 - 29 Update attribute for XElement
 - 30 Update XElement
 - 31 Using Ling query to create Xml output
 - 32 using XElement.Parse to load Xml from String
 - 33 Using Xml Linq to output Html
 - 34 Xml literal with function return
 - 35 Xml Literal with string variable
 
Add 5 new green Fords to the incoming document
  
Module Program
  Sub Main()
    Dim doc As XElement = XElement.Load("Inventory.xml")
    For i As Integer = 0 To 4
      Dim newCar As New XElement("Car", _
        New XAttribute("ID", i + 1000), _
          New XElement("Color", "Green"), _
          New XElement("Make", "Ford"), _
          New XElement("PetName", ""))
      doc.Add(newCar)
    Next
    Console.WriteLine(doc)
  End Sub
End Module
Adding XElement to XElement
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        xml.AddFirst(New XElement("person", _
                        New XElement("id", 5), _
                        New XElement("firstname", "Tom"), _
                        New XElement("lastname", "Cruise"), _
                        New XElement("idrole", 1)))
        Console.WriteLine(xml)
    End Sub
End Module
Add the new node to the bottom of the XML tree
  
Imports System
Imports System.Xml.Linq
    Public Class MainClass
        Public Shared Sub Main()
            Dim employees As XElement = XElement.Load("Employees.xml")
            Dim newEmployee = <Employee id=<%= 1 %>>
                                  <Name>First</Name>
                                  <Title>Coder</Title>
                                  <HireDate>07/15/2006</HireDate>
                                  <HourlyRate>9.95</HourlyRate>
                              </Employee>
            employees.Add(newEmployee)
            For Each ele In employees.<Employee>
                ele.Add(<TerminationDate></TerminationDate>)
                ele.Add(New XAttribute("Status", ""))
            Next
            Console.WriteLine(employees.ToString())
        End Sub
    End Class
After elements
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine("After <firstname>")
        For Each tag In firstName.ElementsAfterSelf()
            Console.WriteLine(tag.Name)
        Next
    End Sub
End Module
Before elements
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine("Before <firstname>")
        For Each tag In firstName.ElementsBeforeSelf()
            Console.WriteLine(tag.Name)
        Next
    End Sub
End Module
Build an XElement from string
  
Class Car
  Public PetName As String
  Public ID As Integer
End Class
Module Program
  Sub Main()
    Dim myElement As String = _
      "<Car ID="3">" & _
        "<Color>Yellow</Color>" & _
        "<Make>Yugo</Make>" & _
      "</Car>"
    Dim newElement As XElement = XElement.Parse(myElement)
    Console.WriteLine(newElement)
    Console.WriteLine()
    " Load the SimpleInventory.xml file.
    Dim myDoc As XDocument = XDocument.Load("SimpleInventory.xml")
    Console.WriteLine(myDoc)
  End Sub
End Module
Convert comma separated value to Xml
  
Imports System
Imports System.Xml.Linq
Imports Microsoft.VisualBasic.FileIO
Imports System.Text
Imports System.IO
    Public Class MainClass
        Public Shared Sub Main(ByVal args As String())
            Dim xmlTree As XElement
            Using parser As TextFieldParser = My.ruputer.FileSystem.OpenTextFieldParser("data.txt")
                parser.TextFieldType = FieldType.Delimited
                parser.Delimiters = New String() {","}
                parser.HasFieldsEnclosedInQuotes = True
                xmlTree = <Employees></Employees>
                Dim currentRow As String()
                Do While Not parser.EndOfData
                    currentRow = parser.ReadFields
                    xmlTree.Add(<Employee id=<%= currentRow(0) %>>
                                    <Name><%= currentRow(1) %></Name>
                                    <Title><%= currentRow(2) %></Title>
                                    <HireDate><%= currentRow(3) %></HireDate>
                                    <HourlyRate><%= currentRow(4) %></HourlyRate>
                                </Employee>)
                Loop
            End Using
            Console.WriteLine(xmlTree)
        End Sub
    End Class
Create an in-memory XML document
  
Class Car
  Public PetName As String
  Public ID As Integer
End Class
Module Program
  Sub Main()
    ".
    Dim inventoryDoc As XDocument = _
      New XDocument( _
        New XDeclaration("1.0", "utf-8", "yes"), _
        New XComment("Current Inventory of AutoLot"), _
          New XElement("Inventory", _
            New XElement("Car", New XAttribute("ID", "1"), _
              New XElement("Color", "Green"), _
              New XElement("Make", "BMW"), _
              New XElement("PetName", "Stan") _
            ), _
            New XElement("Car", New XAttribute("ID", "2"), _
              New XElement("Color", "Pink"), _
              New XElement("Make", "Yugo"), _
              New XElement("PetName", "A") _
            ) _
          ) _
        )
    Console.WriteLine(inventoryDoc)
    inventoryDoc.Save("SimpleInventory.xml")
  End Sub
End Module
Create a query to convert the xml data into fields delimited by quotes and commas.
  
Imports System
Imports System.Xml.Linq
Imports Microsoft.VisualBasic.FileIO
Imports System.Text
Imports System.IO
    Public Class MainClass
        Public Shared Sub Main(ByVal args As String())
            Dim employees As XElement = XElement.Load("xmlFile.xml")
            Dim delimitedData As New StringBuilder
            Dim xmlData = _
                From emp In employees.<Employee> _
                    Select _
                    String.Format("""{0}"",""{1}"",""{2}"",""{3}"",""{4}""", _
                        emp.@id, emp.<Name>.Value, _
                        emp.<Title>.Value, emp.<HireDate>.Value, _
                        emp.<HourlyRate>.Value)
        End Sub
    End Class
Create a single XML element
  
Class Car
  Public PetName As String
  Public ID As Integer
End Class
Module Program
  Sub Main()
    Dim inventory As XElement = _
    <Inventory>
      <Car ID="1">
        <Color>Green</Color>
        <Make>BMW</Make>
        <PetName>Stan</PetName>
      </Car>
    </Inventory>
    " Call ToString() on our XElement.
    Console.WriteLine(inventory)
  End Sub
End Module
Enumerate over the array to build an XElement
  
Imports System.Collections.Generic
Class Car
    Public PetName As String
    Public ID As Integer
End Class
Module Program
    Sub Main()
        Dim data As New List(Of Car)
        data.Add(New Car With {.PetName = "A", .ID = 10})
        data.Add(New Car With {.PetName = "Pat", .ID = 11})
        data.Add(New Car With {.PetName = "Danny", .ID = 12})
        data.Add(New Car With {.PetName = "B", .ID = 13})
        Dim vehicles As XElement = _
          New XElement("Inventory", _
          From c In data _
            Select New XElement("Car", _
             New XAttribute("ID", c.ID), _
             New XElement("PetName", c.PetName) _
            ) _
          )
        Console.WriteLine(vehicles)
    End Sub
End Module
First Last Example
  
Imports System.Reflection
Imports System
Public Class Role
    Public ID As Integer
    Public RoleDescription As String
End Class
Public Class Person
    Public ID As Integer
    Public IDRole As Integer
    Public LastName As String
    Public FirstName As String
End Class
Public Class Salary
    Public IDPerson As Integer
    Public Year As Integer
    Public SalaryYear As Double
End Class
Module Module1
    Sub Main()
        Dim people As New List(Of Person)(New Person() { _
            New Person With {.ID = 1, .IDRole = 1, .LastName = "A", .FirstName = "Brad"}, _
            New Person With {.ID = 2, .IDRole = 2, .LastName = "G", .FirstName = "Tom"} _
        })
        Dim roles As New List(Of Role)(New Role() { _
            New Role With {.ID = 1, .RoleDescription = "Manager"}, _
            New Role With {.ID = 2, .RoleDescription = "Developer"} _
        })
        Dim salaries As New List(Of Salary)(New Salary() { _
                New Salary With {.IDPerson = 1, .Year = 2004, .SalaryYear = 10000.0}, _
                New Salary With {.IDPerson = 1, .Year = 2005, .SalaryYear = 15000.0}, _
                New Salary With {.IDPerson = 2, .Year = 2005, .SalaryYear = 15000.0} _
        })
        FirstLastExample()
    End Sub
    Function firstFunc(ByVal n As Integer) As Boolean
        Return (n Mod 2 = 0)
    End Function
    Function lastFunc(ByVal n As Integer) As Boolean
        Return (n Mod 2 = 0)
    End Function
    Public Sub FirstLastExample()
        Dim numbers As Integer() = New Integer() {1, 2, 3, 4, 5, 6, 7, 8, 9}
        Dim firstDelegate As New Func(Of Integer, Boolean)(AddressOf firstFunc)
        Dim lastDelegate As New Func(Of Integer, Boolean)(AddressOf lastFunc)
        Dim query = numbers.First()
        Console.WriteLine("The first element in the sequence")
        query = numbers.Last()
        Console.WriteLine("The last element in the sequence")
        Console.WriteLine("The first even element in the sequence")
        query = numbers.First(firstDelegate)
        Console.WriteLine("The last even element in the sequence")
        query = numbers.Last(lastDelegate)
    End Sub
End Module
FirstLast Or Default Example
  
Imports System.Reflection
Imports System
Public Class Role
    Public ID As Integer
    Public RoleDescription As String
End Class
Public Class Person
    Public ID As Integer
    Public IDRole As Integer
    Public LastName As String
    Public FirstName As String
End Class
Public Class Salary
    Public IDPerson As Integer
    Public Year As Integer
    Public SalaryYear As Double
End Class
Module Module1
    Sub Main()
        Dim people As New List(Of Person)(New Person() { _
            New Person With {.ID = 1, .IDRole = 1, .LastName = "A", .FirstName = "Brad"}, _
            New Person With {.ID = 2, .IDRole = 2, .LastName = "G", .FirstName = "Tom"} _
        })
        Dim roles As New List(Of Role)(New Role() { _
            New Role With {.ID = 1, .RoleDescription = "Manager"}, _
            New Role With {.ID = 2, .RoleDescription = "Developer"} _
        })
        Dim salaries As New List(Of Salary)(New Salary() { _
                New Salary With {.IDPerson = 1, .Year = 2004, .SalaryYear = 10000.0}, _
                New Salary With {.IDPerson = 1, .Year = 2005, .SalaryYear = 15000.0}, _
                New Salary With {.IDPerson = 2, .Year = 2005, .SalaryYear = 15000.0} _
        })
        FirstLastOrDefaultExample()
    End Sub
    Function firstFunc(ByVal n As Integer) As Boolean
        Return (n Mod 2 = 0)
    End Function
    Function lastFunc(ByVal n As Integer) As Boolean
        Return (n Mod 2 = 1)
    End Function
    Public Sub FirstLastOrDefaultExample()
        Dim numbers As Integer() = New Integer() {1, 3, 5, 7, 9}
        Dim firstDelegate As New Func(Of Integer, Boolean)(AddressOf firstFunc)
        Dim lastDelegate As New Func(Of Integer, Boolean)(AddressOf lastFunc)
        Dim query = numbers.FirstOrDefault(firstDelegate)
        Console.WriteLine("The first even element in the sequence")
        Console.WriteLine("The last odd element in the sequence")
        query = numbers.LastOrDefault(lastDelegate)
    End Sub
End Module
First name element has attributes
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine("FirstName tag has attributes: {0}", firstName.HasAttributes)
    End Sub
End Module
First name tag has child elements
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine("FirstName tag has child elements: {0}", firstName.HasElements)
    End Sub
End Module
FirstName tag"s parent has child elements
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine("FirstName tag"s parent has child elements: {0}", firstName.Parent.HasElements)
    End Sub
End Module
Get child elements by name directly
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim query = From p In xml.Elements("person") _
            Where p.Element("id").value = 1 _
            Select p
        For Each record In query
            Console.WriteLine("Person: {0} {1}", _
                                record.Element("firstname"), _
                                record.Element("lastname"))
        Next
    End Sub
End Module
Get first descendant
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine(firstName.Parent)
    End Sub
End Module
Get value of each color using indexer
  
Module Program
  Sub Main()
    Dim doc As XElement = XElement.Load("Inventory.xml")
    Dim ids = From c In doc.<Car> Select c.@carID
    For i As Integer = 0 To doc.Nodes.Count - 1
      Console.WriteLine(doc.<Car>(i).<Color>.Value)
    Next
  End Sub
End Module
Is FirstName tag empty?
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim firstName As XElement = xml.Descendants("firstname").First()
        Console.WriteLine("Is FirstName tag empty? {0}", IIf(firstName.IsEmpty, "Yes", "No"))
    End Sub
End Module
Is idperson tag empty?
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim idPerson As XElement = xml.Descendants("idperson").First()
        Console.WriteLine("Is idperson tag empty? {0}", IIf(idPerson.IsEmpty, "Yes", "No"))    
     End Sub
End Module
Load the Employees.xml and store the contents into an XElement object.
  
Imports System
Imports System.Xml.Linq
    Public Class MainClass
        Public Shared Sub Main()
            Dim employees As XElement = XElement.Load("Employees.xml")
        End Sub
    End Class
Remove content from XElement
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        xml.Element("role").Remove()
        Console.WriteLine(xml)
    End Sub
End Module
Remove from XElement
  
Imports System
Imports System.Data.DLinq
Imports System.Expressions
Imports System.Query
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        xml.Descendants("idperson").First().Remove()
        xml.Elements("role").Remove()
        Console.WriteLine(xml)
    End Sub
End Module
Remove the 4th Employee element.
  
 
Imports System
Imports System.Xml.Linq
    Public Class MainClass
        Public Shared Sub Main()
            Dim employees As XElement = XElement.Load("Employees.xml")
            employees.<Employee>.ElementAt(3).Remove()
        End Sub
    End Class
Replace content from XElement
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        xml.Element("person").ReplaceNodes(New XElement("id", 5), _
                                             New XElement("firstname", "A"), _
                                             New XElement("lastname", "B"), _
                                             New XElement("role", 1))
        Console.WriteLine(xml)
    End Sub
End Module
Set new value to Xml document
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xdoc As XDocument = XDocument.Load("data.xml")
        xdoc.Element("PLAY").Element("PERSONA").SetValue("new value")
        Console.WriteLine(xdoc.Element("PLAY").Element("PERSONA").Value)
    End Sub
End Module
The Root property returns the top-level XElement
  
Imports System
Imports System.Xml.Linq
    Public Class MainClass
        Public Shared Sub Main()
            Dim xmlDoc As XDocument = XDocument.Load("Employees.xml")
            Console.WriteLine("The document declaration is "{0}"", xmlDoc.Declaration.ToString)
            Console.WriteLine("The root element is "{0}"", xmlDoc.Root.Name.LocalName)
        End Sub
    End Class
Update attribute for XElement
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim role As XElement = xml.Descendants("id").First()
        Console.WriteLine(role)
        role.SetAttributeValue("year", "2006")
        Console.WriteLine(role)
    End Sub
End Module
Update XElement
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim role As XElement = xml.Descendants("role").First()
        Console.WriteLine(role)
        role.SetElementValue("description", "Actor")
        Console.WriteLine(role)
    End Sub
End Module
Using Ling query to create Xml output
  
Imports System
Imports System.Xml.Linq
        Public Class Employee
            Public EmployeeID As Integer
            Public FirstName As String
            Public LastName As String
            Public Title As String
            Public HireDate As DateTime
            Public HourlyWage As Double
        End Class
    Public Class MainClass
        Public Shared Sub Main()
            Dim employeeList = New Employee() _
                    {New Employee With {.EmployeeID = 1, _
                                       .FirstName = "A", _
                                       .LastName = "M", _
                                       .Title = "Tester", _
                                       .HireDate = DateTime.Now, _
                                       .HourlyWage = 10.0}, _
                    New Employee With {.EmployeeID = 2, _
                                       .FirstName = "B", _
                                       .LastName = "C", _
                                       .Title = "Tester", _
                                       .HireDate = DateTime.Now, _
                                       .HourlyWage = 10.75}}
            Dim employees = <Employees>
                    <%= From emp In employeeList _
                        Select _
                        <Employee id=<%= emp.EmployeeID %>>
                            <Name><%= emp.FirstName & " " & emp.LastName %></Name>
                            <Title><%= emp.Title %></Title>
                            <HireDate><%= emp.HireDate.ToString("MM/dd/yyyy") %></HireDate>
                            <HourlyRate><%= emp.HourlyWage %></HourlyRate>
                        </Employee> _
                    %>
                </Employees>
 
            employees.Save("Employees.xml")
            Console.WriteLine(employees.ToString())
        End Sub
    End Class
using XElement.Parse to load Xml from String
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim doc As String = "<people>" & _
                     "<!-- Person section -->" & _
                         "<person>" & _
                          "<id>1</id>" & _
                          "<firstname>A</firstname>" & _
                          "<lastname>B</lastname>" & _
                          "<idrole>1</idrole>" & _
                         "</person>" & _
                           "</people>"
        Dim xml As XElement = XElement.Parse(doc)
        Console.WriteLine(xml)
    End Sub
End Module
Using Xml Linq to output Html
  
Imports System
Imports System.Reflection
Imports System.Xml
Module Module1
    Sub Main()
        Dim xml As XElement = XElement.Load("People.xml")
        Dim html As New XElement("HTML", _
                                New XElement("BODY", _
                                    New XElement("TABLE", _
                                        New XElement("TH", "ID"), _
                                        New XElement("TH", "Full Name"), _
                                        New XElement("TH", "Role"), _
            From p In xml.Descendants("person"), r In xml.Descendants("role") _
            Where p.Element("idrole").Value = r.Element("id").Value _
            Select New XElement("TR", _
                                        New XElement("TD", p.Element("id").Value), _
                                        New XElement("TD", p.Element("firstname").Value _
                                        & " " & p.Element("lastname").Value), _
                                        New XElement("TD", r.Element("roledescription").Value)))))
        html.Save("People.html")
    End Sub
End Module
Xml literal with function return
  
Module Program
  Sub Main()
    Dim interiorColor As String = "White"
    Dim exteriorColor As String = "Blue"
    Dim car1 As XElement = _
  <Automobile>
    <petname><%= GetPetName() %></petname>
    <color type="interior"><%= interiorColor %></color>
    <color type="exterior"><%= exteriorColor %></color>
  </Automobile>
    Console.WriteLine(car1)
  End Sub
  Function GetPetName() As String
    Return "Sidd"
  End Function
End Module
Xml Literal with string variable
  
Module Program
  Sub Main()
    Dim interiorColor As String = "White"
    Dim exteriorColor As String = "Blue"
    Dim car1 As XElement = _
  <Automobile>
    <petname><%= GetPetName() %></petname>
    <color type="interior"><%= interiorColor %></color>
    <color type="exterior"><%= exteriorColor %></color>
  </Automobile>
    Console.WriteLine(car1)
  End Sub
  Function GetPetName() As String
    Return "Sidd"
  End Function
End Module