/// <summary>
        /// Initializes the CollapseXML object
        /// </summary>
        public Collapse(
			MissingFilterBehavior missingFilterBehavior = MissingFilterBehavior.ThrowException,
			bool transformInlineText = true)
        {
            IsInlineTextTransformEnabled = transformInlineText;
            MissingFilterBehavior = missingFilterBehavior;

            dateTimeFormat = "";
            numberFormatProvider = CultureInfo.CurrentCulture;
        }
        /// <summary>
        /// Checks whether the item should be included in the output
        /// </summary>
        /// <param name="filterDefinition">A filter definition object with name and arguments</param>
        /// <param name="behavior">Specifies what happens when a filter is missing</param>
        /// <returns>True if current item should be included</returns>
        internal bool IsIncludedWithFilter(FilterDefinition filterDefinition, MissingFilterBehavior behavior)
        {
            if (!filterMap.ContainsKey(filterDefinition.Function))
            {
                switch (behavior)
                {
                    case MissingFilterBehavior.IncludeItem:
                        return true;
                    case MissingFilterBehavior.OmitItem:
                        return false;
                    case MissingFilterBehavior.ThrowException:
                    default:
                        throw new FilterNotFoundException(filterDefinition.Function);
                }
            }

            // Find a filter
            FilterFunction predicate = filterMap[filterDefinition.Function];

            // Create filter arguments
            IEnumerable<CollapseFilterArgument> arguments =
                filterDefinition.Arguments
                .Select(arg => new CollapseFilterArgument(GetObject(arg.Path), arg.Name));

            // Run the predicate to see if the item should be included
            return predicate(
                new CollapseFilterArgumentCollection(arguments));
        }