2014-09-26 3 views
0

У меня есть существующий XmlNodeList созданные с помощью этого кода:Как добавить новый XmlElement в существующий XmlNodeList?

XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement); 

Я хочу добавить XmlElement в приведенном выше списке. Я не вижу никаких методов на nodes, которые допускают эту операцию. Как добавить XmlElement в XmlNodeList?

ответ

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! 
0

Вы должны преобразовать его к нормальной коллекции затем добавить новый элемент там. Это, конечно, не добавит элемент в исходный документ.

using System.Collections.Generic; 

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