如何将新的XmlElement添加到现有的XmlNodeList中

本文关键字:XmlNodeList XmlElement 添加 | 更新日期: 2023-09-27 18:24:37

我使用以下代码创建了一个现有的XmlNodeList:

XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement);

我想将XmlElement添加到上面的列表中。我在nodes上看不到任何允许此操作的方法。如何将XmlElement添加到XmlNodeList?

如何将新的XmlElement添加到现有的XmlNodeList中

您需要将其转换为一个普通集合,然后在那里添加新元素。这当然不会将元素添加到原始文档中。

using System.Collections.Generic;
var lst = nodes.Cast<XmlElement>().ToList();
lst.Add(elm);

恐怕没有完美的方法将XmlElement添加到XmlNodeList中。

我已经研究了抽象类XmlNodeList及其内部子类XmlElementListXmlChildNodesXPathNodeList的来源。根本没有Add方法。

还有XmlNodeList的另一个后代:CanonicalXmlNodeList。它实现了IList,并包含了Add方法。但这并没有帮助,因为SelectNodes方法返回了一个XPathNodeList实例。

XPathNodeList类实例(由SelectNodes方法返回)有一个私有字段List<XmlNode> list,您可以使用反射来访问它:

var nodeList = xml.SelectNodes("/");
int dummy = nodeList.Count;  // IMPORTANT! Fills the private list when called
Assembly asm = typeof(XmlDocument).Assembly;
var t = asm.GetType("System.Xml.XPathNodeList");
var listField = t.GetField("list", BindingFlags.NonPublic | BindingFlags.Instance);
List<XmlNode> list = (List<XmlNode>)listField.GetValue(nodeList);
list.Add(...);  // <- the goal!