Problem with MemoryStream

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Reshma Prabhu

    Problem with MemoryStream

    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.XmlE xception: 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.XPat h;
    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(ms tream);

    xslt.Transform( mydata,null,wri ter,null);
    DataSet ds = new DataSet();
    ds.ReadXml(mstr eam);
    foreach (DataTable dt in ds.Tables)
    foreach ( DataRow dr in dt.Rows)
    foreach (DataColumn dc in dt.Columns)
    Console.WriteLi ne(dr[dc].ToString());
    re.Close();

    }

    }

    }


  • Nicholas Paldino [.NET/C# MVP]

    #2
    Re: Problem with MemoryStream

    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,wri ter,null);

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

    Hope this helps.


    --
    - Nicholas Paldino [.NET/C# MVP]
    - mvp@spam.guard. caspershouse.co m


    "Reshma Prabhu" <ReshmaPrabhu@d iscussions.micr osoft.com> wrote in message
    news:F66FCD91-C8D9-4678-88D9-EFDB960E4B36@mi crosoft.com...[color=blue]
    > 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.XmlE xception: 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.XPat h;
    > 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(ms tream);
    >
    > xslt.Transform( mydata,null,wri ter,null);
    > DataSet ds = new DataSet();
    > ds.ReadXml(mstr eam);
    > foreach (DataTable dt in ds.Tables)
    > foreach ( DataRow dr in dt.Rows)
    > foreach (DataColumn dc in dt.Columns)
    > Console.WriteLi ne(dr[dc].ToString());
    > re.Close();
    >
    > }
    >
    > }
    >
    > }
    >
    >[/color]


    Comment

    • Jon Skeet [C# MVP]

      #3
      Re: Problem with MemoryStream

      Reshma Prabhu <ReshmaPrabhu@d iscussions.micr osoft.com> wrote:[color=blue]
      > 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.XmlE xception: The root element is missing.[/color]

      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.Positio n = 0;

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

      --
      Jon Skeet - <skeet@pobox.co m>
      Pobox has been discontinued as a separate service, and all existing customers moved to the Fastmail platform.

      If replying to the group, please do not mail me too

      Comment

      Working...