如何将新的XmlElement添加到现有的XmlNodeList中
本文关键字:XmlNodeList XmlElement 添加 | 更新日期: 2023-09-27 18:24:37
我使用以下代码创建了一个现有的XmlNodeList:
XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement);
我想将XmlElement添加到上面的列表中。我在nodes
上看不到任何允许此操作的方法。如何将XmlElement添加到XmlNodeList?
您需要将其转换为一个普通集合,然后在那里添加新元素。这当然不会将元素添加到原始文档中。
using System.Collections.Generic;
var lst = nodes.Cast<XmlElement>().ToList();
lst.Add(elm);
恐怕没有完美的方法将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!