/// <summary> /// Adds filters below the specified xml element. /// </summary> /// <param name="root">Filter root element.</param> private void AddFiltersFromXml(IFilterChain chain, XElement root) { if (root == null) { return; } foreach (var filterElement in root.Elements().Where(element => element.Name.LocalName == XML_ELEMENT_FILTER)) { var fileFilter = FileFilters.CreateFileFilter(filterElement); if (fileFilter != null) { // Configure filter mode IInvertibleFileFilter invertibleFileFilter = fileFilter as IInvertibleFileFilter; if (invertibleFileFilter != null) { var modeAttribute = filterElement.Attribute(XML_ATTRIBUTE_MODE); if (modeAttribute != null) { FileFilterMode mode; if (Enum.TryParse <FileFilterMode>(modeAttribute.Value, true, out mode)) { invertibleFileFilter.Mode = mode; } } } // Add sub filters, if the filter is a filter chain. IFilterChain filterChain = fileFilter as IFilterChain; if (filterChain != null) { AddFiltersFromXml(filterChain, filterElement); } chain.Filters.Add(fileFilter); } } }