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.
Select(id => library. GetMemberName(id)) . ToList(); Cast<XmlNode>() call is necessary, because XmlNodeList does not implement generic IEnumerable<T> , so you have to explicitly convert it to generic collection from non-generic IEnumerable .
XmlNodeList supports iteration and indexed access. XmlNodeList is returned by the following properties and methods. XmlNode. ChildNodes - Returns an XmlNodeList containing all the children of the node. XmlNode.
XmlNode[] nodeArray = myXmlNodeList.Cast<XmlNode>().ToArray();
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...
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With