Exemplo n.º 1
0
        private void ProcessElement(ApplyElementSubNode applyElementSubNode, bool result)
        {
            if (result)
            {
                foreach (var child in new Queue <XNode>(applyElementSubNode.Element.Nodes()))
                {
                    child.Remove();
                    applyElementSubNode.ParentApplyElement.AddBeforeSelf(child);
                }
            }
            else
            {
                switch (applyElementSubNode.OnNotAppliedAction)
                {
                case OnNotAppliedAction.Remove:
                    applyElementSubNode.Element.Remove();
                    break;

                case OnNotAppliedAction.CommentOut:
                    using (var ms = new MemoryStream())
                        using (var writer = new XmlTextWriter(ms, Encoding.UTF8))
                            using (var reader = new StreamReader(ms))
                            {
                                foreach (var child in new Queue <XNode>(applyElementSubNode.Element.Nodes()))
                                {
                                    child.WriteTo(writer);
                                    child.Remove();
                                }
                                writer.Flush();
                                ms.Position = 0;

                                var commentedOutNode = new XComment(reader.ReadToEnd().Trim());
                                applyElementSubNode.ParentApplyElement.AddBeforeSelf(commentedOutNode);

                                if (!applyElementSubNode.OnCommentedOutComment.IsNullOrEmpty())
                                {
                                    var commentForCommentedOutNode = new XComment(" " + applyElementSubNode.OnCommentedOutComment + " ");
                                    commentedOutNode.AddBeforeSelf(commentForCommentedOutNode);
                                    commentForCommentedOutNode.AddAfterSelf(new XText(Environment.NewLine));
                                    commentedOutNode.AddAfterSelf(new XText(Environment.NewLine));
                                    commentedOutNode.AddAfterSelf(new XText(Environment.NewLine));
                                }
                            }
                    break;

                default:
                    throw new NotSupportedException("OnNotAppliedAction not supported: " +
                                                    applyElementSubNode.OnNotAppliedAction);
                }
            }
        }