【问题标题】:How to create an XDocument given an XmlWriter?如何在给定 XmlWriter 的情况下创建 XDocument?
【发布时间】:2013-09-03 12:46:46
【问题描述】:

我们有一个将 XML 写入 XmlWriter 的方法,我们使用它直接生成 XML 流,而无需通过某种形式的 DOM。然而,有时我们确实想要创建一个 DOM。一种方法是始终构建一个 DOM 并从中流式传输(以满足这两个要求),但我们喜欢直接编写 XML 的性能。因此,我们想从 XmlWriter 构建一个 DOM。

请参阅How to create a XmlDocument using XmlWriter in .NET? 以获取有关如何从 XmlWriter 创建 XmlDocument 的示例,尽管使用的代码模式稍有偏差。如果我想要一个 XDocument(或 XElement 子树),是否有类似的选项?

【问题讨论】:

    标签: c# xml linq-to-xml xelement xmlwriter


    【解决方案1】:

    看看XContainer.CreateWriter Method

    XContainer.CreateWriter 方法

    创建一个可用于向 XContainer 添加节点的 XmlWriter。

    XDocumentXElement 都是 XContainer。

    例子:

    XDocument doc = new XDocument();
    using (XmlWriter writer = doc.CreateWriter())
    {
        // Do this directly 
        writer.WriteStartDocument();
        writer.WriteStartElement("root");
        writer.WriteElementString("foo", "bar");
        writer.WriteEndElement();
        writer.WriteEndDocument();
        // or anything else you want to with writer, like calling functions etc.
    }
    

    【讨论】:

    • 我也是这么想的,从性能角度来说唯一需要考虑的是在 writer.Close() 上 XDocument 的 Add() 函数用于添加完整的 XML。跨度>
    • @Marco。你能再解释一下吗?看起来我返回了一个 XmlWellFormedWriter,所以不确定它是如何连接到 XDocument 的,因此当作者关闭时会发生什么。
    • 好的,我明白了。 XNodeBuild 在底层使用,实际上只是使用 StringBuilder 来构建 XML 字符串,然后在最后进行一次大解析。谢谢指点。
    • 给定的 XmlWriter 在哪里?
    猜你喜欢
    • 2011-03-30
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2011-05-04
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多