Convert XmlNodeList to XmlNode[]

别说谁变了你拦得住时间么 提交于 2019-12-23 07:27:47

问题


I have a external library that requires a "XmlNode[]" instead of XmlNodeList. Is there a direct way to do this without iterating over and transferring each node?

I dont want to do this:

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

I am doing this in .NET 2.0 so I need a solution without linq.


回答1:


Try this (VS2008 and target framework == 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;
    }
}

Hints from here: IEnumerable and IEnumerable(Of T) 2




回答2:


How about this straightfoward way...

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

No need for extension methods etc...




回答3:


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


来源:https://stackoverflow.com/questions/1891521/convert-xmlnodelist-to-xmlnode

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!