【问题标题】:Convert XDocument to Stream将 XDocument 转换为流
【发布时间】:2010-10-19 12:13:38
【问题描述】:

如何将 XDocument 中的 XML 转换为 MemoryStream,而不将任何内容保存到磁盘?

【问题讨论】:

    标签: c# .net xml linq-to-xml


    【解决方案1】:

    在 .NET 4 及更高版本中,您可以将其保存到 MemoryStream

    Stream stream = new MemoryStream();
    doc.Save(stream);
    // Rewind the stream ready to read from it elsewhere
    stream.Position = 0;
    

    在 .NET 3.5 及更早版本中,您需要基于 MemoryStream 创建一个 XmlWriter 并保存到该位置,如 dtb's answer 所示。

    【讨论】:

    • 我想知道这两种方法是否都添加了 \r\n 和空格。在这里有一个简单的选项会很棒(而不是重载现有的 XmlWriter)
    【解决方案2】:

    看看XDocument.WriteTo方法;例如:

    using (MemoryStream ms = new MemoryStream())
    {
        XmlWriterSettings xws = new XmlWriterSettings();
        xws.OmitXmlDeclaration = true;
        xws.Indent = true;
    
        using (XmlWriter xw = XmlWriter.Create(ms, xws))
        {
            XDocument doc = new XDocument(
                new XElement("Child",
                    new XElement("GrandChild", "some content")
                )
            );
            doc.WriteTo(xw);
        }
    }
    

    【讨论】:

    • 或 .Save - 但示例成立 ;-p
    • @Marc WriteTo() 和 Save() 有什么区别?
    • @Daniel Fortunov:.Save 提供了更多的重载,但所有这些最终都会调用 .WriteTo
    【解决方案3】:
    XDocument doc = new XDocument(
        new XElement(C_ROOT,
            new XElement("Child")));
    using (var stream = new MemoryStream())
    {
        doc.Save(stream);
        stream.Seek(0, SeekOrigin.Begin);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 1970-01-01
      • 2014-08-08
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多