Problem with MemoryStream

G

Guest

hello,
I am trying to do an xsl tranformation from an XML file into
another xml file. I want the output file to be in MemoryStream so that my
dataset can direclty read xml using
dataset.ReadXml(memoryStream).

But at the time of reading it gives following exception
System.Xml.XmlException: The root element is missing.

But if i write into a file and then read dataset from that then it works fine.

PLEASE HELP ME

The whole code is attached below

Thanks,
The whole code is

using System;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Xml;
using System.IO;
using System.Data;

namespace XslMapper
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
//Create a new XslTransform object.
XslTransform xslt = new XslTransform();

//Load the stylesheet.
xslt.Load("Abc.xsl");

//Create a new XPathDocument and load the XML data to be
transformed.
XPathDocument mydata = new XPathDocument("XYZ.xml");

MemoryStream mstream = new MemoryStream();

//Create an XmlTextWriter which outputs to the console.
StreamWriter writer = new StreamWriter(mstream);

xslt.Transform(mydata,null,writer,null);
DataSet ds = new DataSet();
ds.ReadXml(mstream);
foreach (DataTable dt in ds.Tables)
foreach ( DataRow dr in dt.Rows)
foreach (DataColumn dc in dt.Columns)
Console.WriteLine(dr[dc].ToString());
re.Close();

}

}

}
 
N

Nicholas Paldino [.NET/C# MVP]

Reshma,

The problem here is that you are not resetting the position in the
stream back to the beginning, and therefore, the dataset bombs when trying
to read the contents. After the call to Transform, you have to reset the
stream, like this:

// Transform.
xslt.Transform(mydata,null,writer,null);

// Reset the stream pointer.
mstream.Seek(0, SeekOrigin.Begin);

Hope this helps.
 
J

Jon Skeet [C# MVP]

Reshma Prabhu said:
I am trying to do an xsl tranformation from an XML file into
another xml file. I want the output file to be in MemoryStream so that my
dataset can direclty read xml using
dataset.ReadXml(memoryStream).

But at the time of reading it gives following exception
System.Xml.XmlException: The root element is missing.

That's because you're writing the data to the memory stream, and then
trying to read from it without repositioning the "cursor" of the stream
to the start.

Put

mstream.Position = 0;

just before the call to ReadXml and you'll be fine.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top