将XmlNodeList转换为XmlNode []

时间:2009-12-11 23:23:27

标签: c# xml .net-2.0

我有一个外部库需要“XmlNode []”而不是XmlNodeList。有没有直接的方法来做到这一点,而无需迭代和转移每个节点?

我不想这样做:

XmlNode[] exportNodes = XmlNode[myNodeList.Count];
int i = 0;
foreach(XmlNode someNode in myNodeList) { exportNodes[i++] = someNode; }

我在.NET 2.0中这样做,所以我需要一个没有linq的解决方案。

3 个答案:

答案 0 :(得分:19)

这种直截了当的方式......

var list = new List<XmlNode>(xml.DocumentElement.GetElementsByTagName("nodeName").OfType<XmlNode>());
var itemArray = list.ToArray();

不需要扩展方法等......

答案 1 :(得分:9)

 XmlNode[] nodeArray = myXmlNodeList.Cast<XmlNode>().ToArray();

答案 2 :(得分:8)

试试这个(VS2008和目标框架== 2​​.0):

static void Main(string[] args)
{
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.LoadXml("<a><b /><b /><b /></a>");
    XmlNodeList xmlNodeList = xmldoc.SelectNodes("//b");
    XmlNode[] array = (
        new System.Collections.Generic.List<XmlNode>(
            Shim<XmlNode>(xmlNodeList))).ToArray();
}

public static IEnumerable<T> Shim<T>(System.Collections.IEnumerable enumerable)
{
    foreach (object current in enumerable)
    {
        yield return (T)current;
    }
}

来自此处的提示:IEnumerable and IEnumerable(Of T) 2