I had this problem to ,,, so after some strugling i solved it like this
i created a encodedstringwriter
here is my full implementation , use the parts you like / strip what you
don`t need
Imports System.Text
Imports System.IO
Namespace Text
'''<summary>
''' Implementeerd een stringwriter waarbij je zelf de encoding kunt kiezen
''' de data wordt opgeslagen in een stringbuilder
''' </summary>
Public Class EncodedStringWriter
Inherits StringWriter
'Private property setter
Private _Encoding As Encoding
Public Sub New(ByVal sb As StringBuilder, ByVal Encoding As Encoding)
MyBase.New(sb)
_Encoding = Encoding
End Sub
''' <summary>
'''
''' </summary>
''' <value></value>
''' <doc>
''' <summary>getter voor de string encoding </summary>
''' <returns>de Encoding waarin wordt geschreven </returns>
''' <filterpriority>1</filterpriority>
''' </doc>
Public Overrides ReadOnly Property Encoding() As Encoding
Get
Return _Encoding
End Get
End Property
End Class
End Namespace
Now in my XML base Class
Option Explicit On
Option Strict On
Imports System.Xml
Imports System.Text
Imports System.IO
Public MustInherit Class ClsXMLBase
Public Structure XMLElement
Dim ElementName As String
Dim ElementValue As String
End Structure
Public Sub New()
'-- default
Init()
End Sub
Public Sub New(ByVal XMLRootName As String)
RootNodeName = XMLRootName
Init()
End Sub
Private Mvar_XMLDoc As XmlTextWriter
Private Mvar_sb As StringBuilder
Public Property ObjXML() As XmlTextWriter
Get
If IsNothing(Mvar_XMLDoc) Then
Init()
End If
Return Mvar_XMLDoc
End Get
Set(ByVal value As XmlTextWriter)
Mvar_XMLDoc = value
End Set
End Property
Private Mvar_RootNodeName As String = "MyRootnode"
''' <summary>
''' Getter Setter voor de rootnode naam
''' </summary>
''' <value>De naam van de rootnode .</value>
Public Property RootNodeName() As String
Get
Return Mvar_RootNodeName
End Get
Set(ByVal value As String)
Mvar_RootNodeName = value
End Set
End Property
Public Overridable Sub Reset()
Init()
End Sub
Private Sub Init()
Mvar_sb = New StringBuilder(500)
Mvar_XMLDoc = New XmlTextWriter(New Text.EncodedStringWriter(Mvar_sb,
Encoding.UTF8))
Mvar_XMLDoc.Formatting = Formatting.Indented
Mvar_XMLDoc.Indentation = 2
Mvar_XMLDoc.WriteStartDocument()
Mvar_XMLDoc.WriteStartElement(RootNodeName)
EndWritten = False
End Sub
''' <summary>
''' sluit de instance van het XML object en alle onderliggende streams
''' </summary>
Public Sub Close()
Mvar_XMLDoc.Close()
End Sub
''' <summary>
''' geeft de XML terug als een string
''' </summary>
''' <returns>string data </returns>
Public Function XMLToString() As String
If Not EndWritten Then WriteEndDocument()
Return Mvar_sb.ToString
End Function
Private EndWritten As Boolean
Private Sub WriteEndDocument()
Mvar_XMLDoc.WriteEndElement()
Mvar_XMLDoc.WriteEndDocument()
EndWritten = True
End Sub
End Class
and finally your worker class
ption Explicit On
Option Strict On
Public Class clsYourWorkerclass
Inherits ClsXMLBase
#Region " constructors "
''' <summary>
''' Initializeeerd een nieuwe instance van de class.
''' Overloaded
''' </summary>
''' <param name="RootNodeName">Naam van de rootnode ( standaard is NeProS )
..</param>
Public Sub New(ByVal RootNodeName As String)
MyBase.New(RootNodeName)
End Sub
#End Region
''' <summary>
''' Schrijft het XML document naar een file
''' </summary>
''' <param name="TargetPath">het doel path (VB: C:\test.xml ) </param>
Public Sub WriteXMLDocAsFile(ByVal TargetPath As String)
My.Computer.FileSystem.WriteAllText(TargetPath, MyBase.XMLToString, False)
End Sub
End class
use the mybase prefix to see all methods of the xml doc
you have now a reusable xml document wich you can use with anny encoding you
like
regards
Michel Posseth [MCP]