Chris
Chris

Reputation: 33

How to use Stream to get String

I have a method in a third-party tool that has the following criteria:

ExportToXML(fileName As String) 'Saves the content to file in a form of XML document

or

ExportToXML(stream As System.IO.Stream) 'Saves the content to stream in a form of XML document

How do I use the call with the stream as the parameter to get the XML as a string?

I have researched and tried several things and just still can't get it..

Upvotes: 1

Views: 1342

Answers (1)

Andrew Morton
Andrew Morton

Reputation: 25013

You can use a MemoryStream as the stream to export the XML to, and then read the MemoryStream back with a StreamReader:

Option Infer On

Imports System.IO

Module Module1

    Sub Main()
        Dim xmlData As String = ""
        Using ms As New MemoryStream
            ExportToXML(ms)
            ms.Position = 0
            Using sr As New StreamReader(ms)
                xmlData = sr.ReadToEnd()
            End Using
        End Using

        Console.WriteLine(xmlData)
        Console.ReadLine()

    End Sub

    ' a dummy method for testing
    Private Sub ExportToXML(ms As MemoryStream)
        Dim bytes = Text.Encoding.UTF8.GetBytes("Hello World!")
        ms.Write(bytes, 0, bytes.length)
    End Sub

End Module

Added: Alternatively, as suggested by Coderer:

Using ms As New MemoryStream
    ExportToXML(ms)
    xmlData = Text.Encoding.UTF8.GetString(ms.ToArray())
End Using

A small effort at testing did not show any discernible efficiency difference.

Upvotes: 4

Related Questions