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

时间:2014-09-26 16:01:25

标签: c# xml .net-4.0

我有一个使用此代码创建的现有XmlNodeList:

XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement);

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

2 个答案:

答案 0 :(得分:0)

我担心没有完美的方法可以将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!

答案 1 :(得分:0)

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

using System.Collections.Generic;

var lst = nodes.Cast<XmlElement>().ToList();
lst.Add(elm);