private static void Entitize(HtmlNodeCollection collection)
 {
     foreach (HtmlNode current in (IEnumerable <HtmlNode>)collection)
     {
         if (current.HasAttributes)
         {
             HtmlEntity.Entitize(current.Attributes);
         }
         if (current.HasChildNodes)
         {
             HtmlEntity.Entitize(current.ChildNodes);
         }
         else
         {
             if (current.NodeType == HtmlNodeType.Text)
             {
                 ((HtmlTextNode)current).Text = HtmlEntity.Entitize(((HtmlTextNode)current).Text, true, true);
             }
         }
     }
 }
        /// <summary>
        /// Gets the unescaped inner text of a node, optionally with new lines inserted for line-breaking elements such as "br" and "p".
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="multiline">True to replace line-breaking elements with new lines; otherwise false to collapse to a single line.</param>
        /// <param name="newLine">The new line string to use, defaults to <see cref="System.Environment.NewLine"/>, only applicable if <paramref name="multiline"/> is true.</param>
        /// <param name="lineBreakTags">The element tag names that cause a new line to be inserted, defaults to "br" and "p" if none are specified, only applicable if <paramref name="multiline"/> is true.</param>
        /// <returns>The unescaped inner text of a node, optionally with new lines inserted for line-breaking elements.</returns>
        public static string GetInnerText(this HtmlNode node, bool multiline = false, string newLine = null, params string[] lineBreakTags)
        {
            if (multiline)
            {
                if (lineBreakTags == null || !lineBreakTags.Any())
                {
                    lineBreakTags = _defaultLineBreakTags;
                }
                var n = HtmlNode.CreateNode(node.OuterHtml);
                foreach (var lineBreakTag in lineBreakTags)
                {
                    foreach (var lineBreakNode in n.SelectSafeNodes($"//{lineBreakTag.ToLowerInvariant()}").ToList())
                    {
                        lineBreakNode.ParentNode.ReplaceChild(HtmlNode.CreateNode(_newLineToken + (lineBreakNode.InnerText ?? "") + _newLineToken), lineBreakNode);
                    }
                }
                node = n;
            }
            var text = HtmlEntity.DeEntitize(node.InnerText).Replace("\r", "").Replace("\n", " ").Replace(_newLineToken, newLine ?? Environment.NewLine).CollapseAndTrim(multiline, newLine);

            return(text);
        }
 public static string Entitize(string text, bool useNames)
 {
     return(HtmlEntity.Entitize(text, useNames, false));
 }
 public static string Entitize(string text)
 {
     return(HtmlEntity.Entitize(text, true));
 }