Reputation: 21141
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.
Upvotes: 11
Views: 27800
Reputation: 6683
XmlNode[] nodeArray = myXmlNodeList.Cast<XmlNode>().ToArray();
Upvotes: 13
Reputation: 1683
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...
Upvotes: 20
Reputation: 57956
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
Upvotes: 8