private void ProcessingRootNode(XmlNode node)
        {
            NLog.LogManager.GetCurrentClassLogger().Info(node.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(node.InnerXml);

            var tmpContext = new SimpleProcessorContext();

            tmpContext.CurrentNode = node;

            tmpContext.CurrentResultNode = mResultXmLDocument.DocumentElement;

            DispatchNode(tmpContext);
        }
        private void DispatchNode(SimpleProcessorContext context)
        {
            NLog.LogManager.GetCurrentClassLogger().Info("DispatchNode");
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerXml);

            if (context.CurrentNode.Name == "article")
            {
                ProcessArticleNode(context);

                return;
            }

            if (context.CurrentNode.Name == "title")
            {
                ProcessTitle(context);

                return;
            }

            if (context.CurrentNode.Name == "para")
            {
                ProcessPara(context);

                return;
            }

            if (context.CurrentNode.Name == "section")
            {
                ProcessSection(context);

                return;
            }

            if (context.CurrentNode.Name == "itemizedlist")
            {
                ProcessItemizedList(context);

                return;
            }

            if (context.CurrentNode.Name == "orderedlist")
            {
                ProcessOrderedList(context);

                return;
            }

            if (context.CurrentNode.Name == "listitem")
            {
                ProcessListItem(context);

                return;
            }
        }
        private void ProcessListItem(SimpleProcessorContext context)
        {
            NLog.LogManager.GetCurrentClassLogger().Info("ProcessListItem");
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerXml);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerText);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Value);

            ProcessWithSubNodes(context, "li");
        }
        private void ProcessWithSubNodes(SimpleProcessorContext context, string tagName)
        {
            var tmpCurrentNode = context.CurrentNode;

            var tmpCurrentResultNode = context.CurrentResultNode;

            var tmpElem = mResultXmLDocument.CreateElement(tagName);
            context.CurrentResultNode.AppendChild(tmpElem);

            context.CurrentResultNode = tmpElem;

            context.Level++;

            foreach (XmlNode child in context.CurrentNode.ChildNodes)
            {
                NLog.LogManager.GetCurrentClassLogger().Info(child.Name);

                context.CurrentNode = child;

                DispatchNode(context);
            }

            context.Level--;

            context.CurrentNode = tmpCurrentNode;

            context.CurrentResultNode = tmpCurrentResultNode;
        }
        private void ProcessSection(SimpleProcessorContext context)
        {
            NLog.LogManager.GetCurrentClassLogger().Info("ProcessSection");
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerXml);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerText);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Value);

            ProcessChilds(context);
        }
        private void ProcessPara(SimpleProcessorContext context)
        {
            NLog.LogManager.GetCurrentClassLogger().Info("ProcessPara");
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerXml);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerText);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Value);

            var tmpElem = mResultXmLDocument.CreateElement("p");
            tmpElem.InnerText = context.CurrentNode.InnerText.Trim();

            context.CurrentResultNode.AppendChild(tmpElem);
        }
        private void ProcessTitle(SimpleProcessorContext context)
        {
            NLog.LogManager.GetCurrentClassLogger().Info("ProcessTitle");
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerXml);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerText);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Value);

            NLog.LogManager.GetCurrentClassLogger().Info("context.Level = {0}", context.Level);

            var tmpTargetLevel = context.Level;

            if(tmpTargetLevel > 6)
            {
                tmpTargetLevel = 6;
            }

            var tmpElem = mResultXmLDocument.CreateElement("h" + tmpTargetLevel.ToString());
            tmpElem.InnerText = context.CurrentNode.InnerText.Trim();

            context.CurrentResultNode.AppendChild(tmpElem);
        }
        private void ProcessChilds(SimpleProcessorContext context)
        {
            context.Level++;

            var tmpCurrNode = context.CurrentNode;

            foreach (XmlNode child in context.CurrentNode.ChildNodes)
            {
                context.CurrentNode = child;

                DispatchNode(context);
            }

            context.CurrentNode = tmpCurrNode;

            context.Level--;
        }
        private void ProcessArticleNode(SimpleProcessorContext context)
        {
            NLog.LogManager.GetCurrentClassLogger().Info("ProcessArticleNode");
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.Name);
            NLog.LogManager.GetCurrentClassLogger().Info(context.CurrentNode.InnerXml);

            ProcessChilds(context);
        }