我使用此代碼創建的現有的XmlNodeList:如何將新的XmlElement添加到現有的XmlNodeList?
XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement);
我想要一個的XmlElement添加到上面的列表中。我沒有看到nodes
允許此操作的任何方法。如何將XmlElement添加到XmlNodeList?
我使用此代碼創建的現有的XmlNodeList:如何將新的XmlElement添加到現有的XmlNodeList?
XmlNodeList nodes = xmlDocument.SelectNodes(XPathStatement);
我想要一個的XmlElement添加到上面的列表中。我沒有看到nodes
允許此操作的任何方法。如何將XmlElement添加到XmlNodeList?
恐怕沒有完美的方法將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!
你需要將其轉換爲普通集合,然後添加新元素那裏。這當然不會將元素添加到原始文檔中。
using System.Collections.Generic;
var lst = nodes.Cast<XmlElement>().ToList();
lst.Add(elm);