Core.Xml - refactor

This commit is contained in:
Stephan
2013-04-10 12:47:09 -02:00
parent f2d7e3549d
commit 495b661263
4 changed files with 58 additions and 12 deletions

View File

@@ -0,0 +1,30 @@
using System.Xml.XPath;
namespace Umbraco.Core.Xml
{
/// <summary>
/// Provides extensions to XPathNavigator.
/// </summary>
internal static class XPathNavigatorExtensions
{
/// <summary>
/// Selects a node set, using the specified XPath expression.
/// </summary>
/// <param name="navigator">A source XPathNavigator.</param>
/// <param name="expression">An XPath expression.</param>
/// <param name="variables">A set of XPathVariables.</param>
/// <returns>An iterator over the nodes matching the specified expression.</returns>
public static XPathNodeIterator Select(this XPathNavigator navigator, string expression, params XPathVariable[] variables)
{
if (variables == null || variables.Length == 0 || variables[0] == null)
return navigator.Select(expression);
var compiled = navigator.Compile(expression);
var context = new DynamicContext();
foreach (var variable in variables)
context.AddVariable(variable.Name, variable.Value);
compiled.SetContext(context);
return navigator.Select(compiled);
}
}
}