【问题标题】:C# Diffgram to XElement, Reader/Writer confusionC# Diffgram 到 XElement,读写器混淆
【发布时间】:2014-02-12 10:36:19
【问题描述】:

如何在 XElement 中获取 DataSet 的 Diffgram? (或 XDocument)

我发现了如何在字符串中获取 Diffgram:

        // 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();

但是首先将 diffgram 的 xml 输出到字符串然后将其解析回 XElement 似乎很浪费。因此,我试图找出如何填写此代码中缺少的链接,该链接应将 diffgram 的 xml 传输而不转换为 Xml 变量:

        // 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

我希望找到我的代码问题的答案,甚至可能了解流/读取器/写入器的真正工作原理。

【问题讨论】:

    标签: c# xml stream xmlreader


    【解决方案1】:

    你需要一个写入器,而不是读取器,从 DataSet 写入 XDocument:

    XDocument xd = new XDocument();
    using (var writer = xd.CreateWriter())
    {
        ds.WriteXml(writer, XmlWriteMode.WriteSchema); // XmlWriteMode.DiffGram
    }
    

    【讨论】:

    • 谢谢!很简单,可惜自己还是很难解决。我无法想到 ds.WriteXml() 写入 FROM ds,而 xd.CreateWriter() 给出了写入到 xd 的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多