我有一个使用此代码创建的现有XmlNodeList:
XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement);
我想在上面的列表中添加一个XmlElement。我没有在nodes
上看到允许此操作的任何方法。如何将XmlElement添加到XmlNodeList?
答案 0 :(得分:0)
我担心没有完美的方法可以将XmlElement
添加到XmlNodeList
。
我已经查看了抽象类XmlNodeList
及其内部后代的来源:XmlElementList
,XmlChildNodes
和XPathNodeList
。根本没有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);