protected virtual string ProcessGetCriterea(XElement xmlParceRule, IDOMElement expectedNode, PostModel postModel, string postfix = null)
        {
            string result = null;

            var getCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (string.IsNullOrEmpty(postfix) ? GET_CRITEREA_NODE_NAME : GET_CRITEREA_NODE_NAME + postfix).ToLower());
            var getCriterea     = getCritereaNode.Elements().First();

            var getResult = string.Empty;

            switch (getCriterea.Name.ToString().ToLower())
            {
            case "values":
            case "childs":
            case "element":
            case "content":
                getResult = expectedNode.GetContent(getCriterea.Name.ToString());
                break;

            default:
                var expectedNodeContent = expectedNode.GetContent(getCriterea.Name.ToString());
                if (!string.IsNullOrEmpty(expectedNodeContent))
                {
                    getResult = string.IsNullOrEmpty(getCriterea.Value) ? expectedNodeContent : Regex.Match(expectedNodeContent, getCriterea.Value, RegexOptions.IgnoreCase).Value;
                }
                break;
            }

            var trimCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (string.IsNullOrEmpty(postfix) ? TRIM_CRITEREA_NODE_NAME : TRIM_CRITEREA_NODE_NAME + postfix).ToLower());

            if (trimCritereaNode != null)
            {
                if (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == STRING_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                {
                    var splitResult = getResult.Split(trimCritereaNode.Value.Split(new[] { ' ' }), StringSplitOptions.RemoveEmptyEntries);
                    result = trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == GET_LAST_OCCURENCE_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value))
                                ? splitResult[splitResult.Length - 1]
                                : splitResult[0];
                }
                else if (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == REG_EXP_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                {
                    if (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == GET_LAST_OCCURENCE_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                    {
                        var regExpMatch = Regex.Matches(getResult, trimCritereaNode.Value, RegexOptions.IgnoreCase);
                        result = regExpMatch[regExpMatch.Count - 1].Value;
                    }
                    else
                    {
                        result = Regex.Match(getResult, trimCritereaNode.Value, RegexOptions.IgnoreCase).Value;
                    }
                }
                else if (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == REMOVE_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                {
                    result = result.Where(el => !trimCritereaNode.Value.Any(elem => elem == el)).Aggregate(string.Empty, (agg, el) => agg + el);
                }
                else
                {
                    result = getResult.Trim(trimCritereaNode.Value.ToArray());
                }

                var additionalTrimCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (ADDITIONAL_PREFIX + (string.IsNullOrEmpty(postfix) ? TRIM_CRITEREA_NODE_NAME : TRIM_CRITEREA_NODE_NAME + postfix)).ToLower());
                if (additionalTrimCritereaNode != null)
                {
                    if (additionalTrimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == STRING_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                    {
                        var splitResult = getResult.Split(trimCritereaNode.Value.Split(new[] { ' ' }), StringSplitOptions.RemoveEmptyEntries);
                        result = trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == GET_LAST_OCCURENCE_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value))
                                    ? splitResult[splitResult.Length - 1]
                                    : splitResult[0];
                    }
                    else if (additionalTrimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == REG_EXP_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                    {
                        if (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == GET_LAST_OCCURENCE_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                        {
                            var regExpMatch = Regex.Matches(getResult, trimCritereaNode.Value, RegexOptions.IgnoreCase);
                            result = regExpMatch[regExpMatch.Count - 1].Value;
                        }
                        else
                        {
                            result = Regex.Match(getResult, trimCritereaNode.Value, RegexOptions.IgnoreCase).Value;
                        }
                    }
                    else if (additionalTrimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == REMOVE_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)))
                    {
                        result = result.Where(el => !additionalTrimCritereaNode.Value.Any(elem => elem == el)).Aggregate(string.Empty, (agg, el) => agg + el);
                    }
                    else
                    {
                        result = result.Trim(additionalTrimCritereaNode.Value.ToArray());
                    }
                }
            }
            else
            {
                result = getResult;
            }

            return(result);
        }