如何将包含XML的流的内容作为子元素添加到现有XmlElement中

本文关键字:添加 元素 XmlElement 包含 XML | 更新日期: 2023-09-27 18:17:14

我有一个包含XML的Stream,我想加载它的内容,然后将它的根元素作为子元素添加到现有的XmlElement。我知道已经有XmlDocument.Load(Stream stream);,但这将创建一个完整的,独立的XML文档。相反,我想给定一个现有的XmlDocument,在该文档中指定一个元素来加载流。这可能吗?

如何将包含XML的流的内容作为子元素添加到现有XmlElement中

要从流中添加XML作为现有XmlElement的子元素,您可以首先将XML加载到XmlDocumentFragment中,然后附加片段,如下所示:

// stream is an opened Stream containing a valid XML document
// xmlElement is an xmlElement 
using (var reader = XmlReader.Create(stream))
{
    var fragment = xmlElement.OwnerDocument.CreateDocumentFragment();
    using (var writer = fragment.CreateNavigator().AppendChild())
    {
        writer.WriteNode(reader, true);
    }
    foreach (var child in fragment.ChildNodes.OfType<XmlElement>().ToList())
        xmlElement.AppendChild(child);
}

此解决方案节省内存,因为它避免将整个XML加载到临时字符串中进行解析,而是使用XmlWriter.WriteNode(XmlReader, Boolean)将XML读取器和写入器链接在一起。

样本小提琴。