Read and Write XML in VB.NET

'Create/Write Default Config File
Dim XmlWrt As Global.System.Xml.XmlWriter = Global.System.Xml.XmlWriter.Create(ConfigFile, _
New Global.System.Xml.XmlWriterSettings() With {.Indent = True, .Encoding = Encoding.UTF8})
With XmlWrt
	.WriteStartDocument()
	.WriteStartElement("Root")
	.WriteStartElement("Environments") 'Root|Environments

	.WriteStartElement("Default") 'Root|Environments|Default
	.WriteAttributeString("Env", "Qual")
	.WriteEndElement() '/Root|Environments|Default
	.WriteEndElement() '/Root|Environments


	.WriteStartElement("Systems") 'Root|Systems
	.WriteStartElement("Qual") 'Root|Systems|Qual
	.WriteComment("Don't remove or rename the Default...")

	.WriteElementString("isEnabled", "False")

	.WriteStartElement("WebService_AW_URL")
	.WriteCData("https://localhost/")
	.WriteEndElement()

	.WriteElementString("APIKey", "01234ABCDE")
	.WriteElementString("Username", "Username")
	.WriteElementString("Password", "P@ssw0rd")

	.WriteStartElement("WebService_LDSD_URL")
	.WriteCData("http://host/LDSDDEV_01.EventManager/EventLog.asmx?WSDL")
	.WriteEndElement()

	.WriteElementString("ConfigID", "0")

	.WriteEndElement() '/Root|Systems|Qual
	.WriteEndElement() '/Root|Systems
	.WriteEndElement() '/Root
	.WriteEndDocument()
	.Close()
End With

'Create XML as STRING (and force UTF8)
Dim sXML As String
Using xStream As New IO.MemoryStream()
	Using xWriter As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(xStream, New System.Xml.XmlWriterSettings With {.Indent = False, .Encoding = New UTF8Encoding(False)})
		xWriter.WriteStartDocument()
		xWriter.WriteStartElement("Colors")
		xWriter.WriteElementString("Color", "RED")
		xWriter.WriteEndDocument()
	End Using
	sXML = Encoding.Default.GetString(xStream.ToArray())
End Using

'Create XML as STRING (alternative)
Dim sXML As New StringBuilder()
Using xWriter = Global.System.Xml.XmlTextWriter.Create(New IO.StringWriter(sXML), _
	New Global.System.Xml.XmlWriterSettings With {.Indent = True, .Encoding = Encoding.UTF8})
	xWriter.WriteStartDocument()
	xWriter.WriteStartElement("Root")
	xWriter.WriteStartElement("SpezChars")
	xWriter.WriteCData(":#@*รง%&")
	xWriter.WriteEndElement()
	xWriter.WriteElementString("EventSource", EventSource)
	xWriter.WriteElementString("EventType", EventType)
	xWriter.WriteElementString("ProcessGuid", ProcessGuid)
	xWriter.WriteElementString("iRet", iRet)
	xWriter.WriteElementString("sRet", sRet)
	xWriter.WriteEndElement() 'Root
	xWriter.WriteEndDocument()
	xWriter.Close()
End Using

Dim sString As String = sXML.ToString


'Read Config from file
If IO.File.Exists(ConfigFile) Then
	Dim doc As XDocument = XDocument.Load(ConfigFile)
	Dim oElement As XElement

	'Test integrity
	If doc.Descendants("Root").Count = 0 Then Exit Sub
	If doc.Root.Descendants("Environments").Count = 0 Then Exit Sub
	If doc.Root..Descendants("Default").Count = 0 Then Exit Sub
	If doc.Root...FirstOrDefault.Attribute("Env") Is Nothing Then Exit Sub

	'System
	oElement = doc...Descendants(ReqSys).FirstOrDefault
	For Each itm In oElement.Elements
		If (itm.NodeType = Global.System.Xml.XmlNodeType.Element) Then
			Select Case itm.Name
				Case "isEnabled" : isEnabled = CBool(itm.Value)
				Case "WebService_AW_URL" : WebService_AW_URL = itm.Value
				Case "APIKey" : APIKey = itm.Value
			End Select
		End If
	Next
End If

'Read XML from String
Dim xParams As XDocument = XDocument.Parse("")
Dim sString As String = xParams.Root..Value