2014-09-26 79 views

回答

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

你需要將其轉換爲普通集合,然後添加新元素那裏。這當然不會將元素添加到原始文檔中。

using System.Collections.Generic; 

var lst = nodes.Cast<XmlElement>().ToList(); 
lst.Add(elm); 
相關問題