/// <summary>
        /// Calculates the specified values.
        /// </summary>
        /// <param name="values">The values.</param>
        public override IEnumerable <Object> Calculate(IEnumerable <Object> values)
        {
            Selector.ApplyAttributes(Attributes);
            var filteredElements = values.GetOrEmpty().SelectMany(node => Selector.SelectElement(node));

            foreach (var filteredElement in filteredElements)
            {
                if (Modifiers.Any())
                {
                    foreach (var modifier in Modifiers)
                    {
                        foreach (var element in modifier.ModifySelection(filteredElement))
                        {
                            yield return(element);
                        }
                    }
                }
                else
                {
                    yield return(filteredElement);
                }
            }
        }