Here's a quick question that I hit my head today.
I am trying to convert a .Net dataset to an XML stream, convert it to an xsl file in memory, and then output the result to a new XML file.
Here's the current solution:
string transformXML = @"pathToXslDocument";
XmlDocument originalXml = new XmlDocument();
XmlDocument transformedXml = new XmlDocument();
XslCompiledTransform transformer = new XslCompiledTransform();
DataSet ds = new DataSet();
string filepath;
originalXml.LoadXml(ds.GetXml());
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
transformer.Load(transformXML);
transformer.Transform(originalXml, writer);
transformedXml.LoadXml(sb.ToString());
transformedXml.Save(filepath);
writer.Close();
Here is the source code:
BufferedStream stream = new BufferedStream(new MemoryStream());
DataSet ds = new DataSet();
da.Fill(ds);
ds.WriteXml(stream);
StreamReader sr = new StreamReader(stream, true);
stream.Position = 0;
XmlReader reader = XmlReader.Create(sr, null);
XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load(@"<path to xsl file>");
transformer.Transform(reader, null, writer);
For some reason, the reader has no node root in the transformer.Transform method; in fact, the reader does not read anything from StreamReader.
My questions is what is wrong with this code? Secondly, is there a better way to convert / convert / store a dataset in XML?
Edit: Both answers were helpful, but technically aka was closer. However, I am leaning towards a solution that more closely resembles Longhorn after trying both solutions.
source
share