Skip to main content

Add an element as the last child

Add an element as the last child

Public Sub XLinq60()
        Dim doc = XDocument.Load(dataPath + "config.xml")
        Dim config = doc.<config>(0)
        config.Add(<logFolder>c:\log</logFolder>)
        Console.WriteLine(config)
    End Sub

Result:
<config>
  <rootFolder>c:\</rootFolder>
  <iterations>5</iterations>
  <maxMemory>50.5</maxMemory>
  <tempFolder>c:\temp</tempFolder>
  <logFolder>c:\log</logFolder>
</config>


Add an element as the first child

Add an element as the first child

Public Sub XLinq61()
    Dim doc = XDocument.Load(dataPath + "config.xml")
    Dim config = doc.<config>(0)
    config.AddFirst(<logFolder>c:\log</logFolder>)
    Console.WriteLine(config)
End Sub

Result:
<config>
  <logFolder>c:\log</logFolder>
  <rootFolder>c:\</rootFolder>
  <iterations>5</iterations>
  <maxMemory>50.5</maxMemory>
  <tempFolder>c:\temp</tempFolder>
</config>


Add multiple elements as children

Add multiple elements as children

Public Sub XLinq62()
    Dim doc = XDocument.Load(dataPath + "config.xml")
    Dim first = <temp>
                    <logFolder>c:\log</logFolder>
                    <resultsFolders>c:\results</resultsFolders>
                </temp>

    Dim last = <temp>
                   <mode>client</mode>
                   <commPort>2</commPort>
               </temp>

    Dim config = doc.<config>(0)
    config.AddFirst(first.Nodes())
    config.Add(last.Nodes())
    Console.WriteLine(config)
End Sub

Result:
<config>
  <logFolder>c:\log</logFolder>
  <resultsFolders>c:\results</resultsFolders>
  <rootFolder>c:\</rootFolder>
  <iterations>5</iterations>
  <maxMemory>50.5</maxMemory>
  <tempFolder>c:\temp</tempFolder>
  <mode>client</mode>
  <commPort>2</commPort>
</config>


Add an attribute to an element

Add an attribute to an element

Public Sub XLinq63()
    Dim elem = <customer id="abc">this is an XElement</customer>
    Console.WriteLine("Original element {0}", elem)
    elem.Add(New XAttribute("name", "Jack"))
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:
Original element <customer id="abc">this is an XElement</customer>
Updated element <customer id="abc" name="Jack">this is an XElement</customer>


Add content to an existing element

Add attributes and elements

Public Sub XLinq64()
    Dim elem = <customer id="abc">this is an XElement</customer>
    Console.WriteLine("Original element {0}", elem)

    Dim additionalContent = <temp>
                                <phone>555-555-5555</phone>
                                <!--new customer-->
                                <%= New XAttribute("name", "Jack") %>
                            </temp>

    elem.Add(additionalContent.Nodes())
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:
Original element <customer id="abc">this is an XElement</customer>
Updated element <customer id="abc">this is an XElement<phone>555-555-5555</phone><!--new customer--></customer>


Replace content of a container (element or document

Replace content to an existing element

Public Sub XLinq65()
    Dim elem = <customer id="abc">this is an XElement</customer>
    Console.WriteLine("Original element {0}", elem)

    elem.SetElementValue("id", "this is a customer element")
    Console.WriteLine("Updated element {0}", elem)

    Dim newContent = <temp>this is a customer element<phone>555-555-5555</phone>
                         <!-- new customer -->
                         <%= New XAttribute("name", "Jack") %>
                     </temp>

    elem.SetValue(newContent.Nodes())
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:
Original element <customer id="abc">this is an XElement</customer>
Updated element <customer id="abc">this is an XElement<id>this is a customer element</id></customer>
Updated element <customer id="abc">System.Xml.Linq.XContainer+&lt;Nodes&gt;d__0</customer>


Remove content of an element

Remove content of an element

Public Sub XLinq66()
    Dim elem = <customer id="abc">this is an XElement</customer>
    Console.WriteLine("Original element {0}", elem)
    elem.RemoveAll()
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:Original element <customer id="abc">this is an XElement</customer> Updated element <customer />


Remove all content

Remove all content and attributes of an element

Public Sub XLinq67()
    Dim elem = _
        <customer id="abc">
            <name>jack</name>this is an XElement<!--new customer-->
        </customer>

    Console.WriteLine("Original element {0}", elem)
    elem.RemoveAll()
    Console.WriteLine("Stripped element {0}", elem)
End Sub

Result:
Original element <customer id="abc">
  <name>jack</name>this is an XElement<!--new customer--></customer>
Stripped element <customer />


Remove all attributes

Remove all attributes of an element

Public Sub XLinq68()
    Dim elem = _
        <customer name="jack" id="abc">this is an XElement<!--new customer-->
        </customer>

    Console.WriteLine("Original element {0}", elem)
    elem.RemoveAttributes()
    Console.WriteLine("Stripped element {0}", elem)
End Sub

Result:
Original element <customer name="jack" id="abc">this is an XElement<!--new customer--></customer>
Stripped element <customer>this is an XElement<!--new customer--></customer>


Remove an attribute of an element

Remove an attribute of an element

Public Sub XLinq69()
    Dim elem = _
         <customer name="jack" id="abc">this is an XElement<!--new customer-->
         </customer>

    Console.WriteLine("Original element {0}", elem)
    elem.@id = Nothing
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:
Original element <customer name="jack" id="abc">this is an XElement<!--new customer--></customer>
Updated element <customer name="jack">this is an XElement<!--new customer--></customer>


Update an attribute

Update the value of an attribute

Public Sub XLinq70()
    Dim elem = _
        <customer name="jack" id="abc">this is an XElement<!--new customer-->
        </customer>

    Console.WriteLine("Original element {0}", elem)
    elem.@name = "David"
    Console.WriteLine("Updated attribute {0}", elem)

End Sub

Result:
Original element <customer name="jack" id="abc">this is an XElement<!--new customer--></customer>
Updated attribute <customer name="David" id="abc">this is an XElement<!--new customer--></customer>


Delete an element by name

Remove a child element by name

Public Sub XLinq71()
    Dim elem = _
        <customer id="abc">
            <name>jack</name>this is an XElement<!--new customer-->
        </customer>

    Console.WriteLine("Original element {0}", elem)
    elem.SetElementValue("name", Nothing)
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:
Original element <customer id="abc">
  <name>jack</name>this is an XElement<!--new customer--></customer>
Updated element <customer id="abc">this is an XElement<!--new customer--></customer>


Update a child element by name

Update a child element by name

Public Sub XLinq72()
    Dim elem = _
         <customer id="abc">
             <name>jack</name>this is an XElement<!--new customer-->
         </customer>

    Console.WriteLine("Original element {0}", elem)
    elem.<name>.Value = "David"
    Console.WriteLine("Updated element {0}", elem)
End Sub

Result:
Original element <customer id="abc">
  <name>jack</name>this is an XElement<!--new customer--></customer>
Updated element <customer id="abc">
  <name>David</name>this is an XElement<!--new customer--></customer>


Remove a list of elements

Remove a list of elements

Public Sub XLinq73()
    Dim doc = XDocument.Load(dataPath + "nw_customers.xml")
    Dim elems = doc.<Root>.<Customers>
    Console.WriteLine("Before count {0}", elems.Count())

    elems.Take(15).Remove()
    Console.WriteLine("After count {0}", elems.Count())
End Sub

Result:
Before count 91
After count 76


Remove a list of attributes

Remove a list of attributes

Public Sub XLinq74()
    Dim doc = XDocument.Load(dataPath + "nw_customers.xml")
    Dim attrs = doc...<Customers>.Attributes()
    Console.WriteLine("Before count {0}", attrs.Count())

    attrs.Take(15).Remove()
    Console.WriteLine("After count {0}", attrs.Count())
End Sub

Result:
Before count 91
After count 76


Add an un-parented element to an element

Add an un-parented element to an element

Public Sub XLinq75()
    Dim e = <foo>this is an element</foo>
    If e.Parent Is Nothing Then
        Console.WriteLine("Parent : Nothing")
    Else
        Console.WriteLine("Parent : " + e.Parent.Value)
    End If
    Dim p = <bar><%= e %></bar> 'add to document        
    If e.Parent Is Nothing Then
        Console.Write("Parent : Nothing")
    Else
        Console.WriteLine("Parent : " + e.Parent.Name.ToString)
    End If
End Sub

Result:
Parent : Nothing
Parent : bar


Add a parented element to a document

Adding a parented element to another container clones it

Public Sub XLinq76()
    Dim e = <foo>this is an element</foo>
    Dim p1 = <p1><%= e %></p1>
    Console.WriteLine("Parent : " + e.Parent.Name.ToString())
    Dim p2 = <p2><%= e %></p2>
    Console.WriteLine("Parent : " + e.Parent.Name.ToString())
End Sub

Result:
Parent : p1
Parent : p1