2 // System.Web.UI.XPathBinder
5 // Ben Maurer (bmaurer@users.sourceforge.net)
11 using System.Collections;
12 using System.Collections.Specialized;
14 using System.Xml.XPath;
17 namespace System.Web.UI {
18 public sealed class XPathBinder {
19 private XPathBinder ()
23 public static object Eval (object container, string xpath)
25 if (xpath == null || xpath.Length == 0)
26 throw new ArgumentNullException ("xpath");
28 IXPathNavigable factory = container as IXPathNavigable;
31 throw new ArgumentException ("container");
33 object result = factory.CreateNavigator ().Evaluate (xpath);
35 XPathNodeIterator itr = result as XPathNodeIterator;
38 return itr.Current.Value;
45 public static string Eval (object container, string xpath, string format)
47 object result = Eval (container, xpath);
51 if (format == null || format.Length == 0)
52 return result.ToString ();
54 return String.Format (format, result);
57 public static IEnumerable Select (object container, string xpath)
59 if (xpath == null || xpath.Length == 0)
60 throw new ArgumentNullException ("xpath");
62 IXPathNavigable factory = container as IXPathNavigable;
65 throw new ArgumentException ("container");
67 XPathNodeIterator itr = factory.CreateNavigator ().Select (xpath);
68 ArrayList ret = new ArrayList ();
70 while (itr.MoveNext ()) {
71 IHasXmlNode nodeAccessor = itr.Current as IHasXmlNode;
72 if (nodeAccessor == null)
73 throw new InvalidOperationException ();
74 ret.Add (nodeAccessor.GetNode ());