Question

How do I obtain the Diffgram of a DataSet in an XElement? (Or XDocument)

I found out how to obtain the Diffgram in a string:

        // DataSet to Diffgram in a string:
        StringBuilder sb = new StringBuilder();
        XmlWriterSettings settings = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8 };
        using (XmlWriter xw = XmlWriter.Create(sb, settings))
        {
            ds.WriteXml(xw, XmlWriteMode.WriteSchema);//XmlWriteMode.DiffGram
        }
        string str = sb.ToString();

but it seems wasteful to first output the xml of a diffgram to a string and then parse it back in to an XElement. So I am trying to find out how to fill in the missing link in this code, which should transfer the xml of the diffgram without conversions to an Xml variable:

        // I have a DataSet filled with some data
        DataSet ds = new DataSet();
        ds.Tables.Add(ScanData);

        // I need the diffgram of the DataSet in an XElement
        XElement xe = null;
        XmlReader xr = xe.CreateReader();

        // I could live with output to XDocument, and extract the XElement later
        XDocument xd = new XDocument();
        XmlReader xrd = xd.CreateReader();

        // Q: How do I construct a stream that connects an XmlReader to ds.WriteXml()?
        Stream stream =  ...???... ;

        // This method creates the DiffGram output format to a stream
        ds.WriteXml(stream, XmlWriteMode.WriteSchema);//diffgram output

I hope to find the answer to my code problem, and maybe even to learn how stream/reader/writer really work.

Was it helpful?

Solution

You need a writer, not reader, to write from DataSet to XDocument:

XDocument xd = new XDocument();
using (var writer = xd.CreateWriter())
{
    ds.WriteXml(writer, XmlWriteMode.WriteSchema); // XmlWriteMode.DiffGram
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top