Beispiel #1
0
        private static string AddFragments(TagReader reader, HtmlFragment parentFragment, Stack <string> openTagStack)
        {
            while (reader.Read())
            {
                parentFragment.TryToAddText(HtmlText.Create(reader.Document, reader.PreviousTag, reader.CurrentTag));

                if (reader.CurrentTag.TagType == TagType.Close && openTagStack.Any(t => t.Equals(reader.CurrentTag.Name, StringComparison.CurrentCultureIgnoreCase)))
                {
                    return(reader.CurrentTag.Name);
                }

                var node = parentFragment.AddNode(reader.CurrentTag);
                node.Parent = parentFragment;

                if (reader.CurrentTag.TagType == TagType.Open)
                {
                    openTagStack.Push(reader.CurrentTag.Name);

                    var lastClosed = AddFragments(reader, node, openTagStack);
                    if (lastClosed != openTagStack.Pop())
                    {
                        return(lastClosed);
                    }
                }
            }
            return(null);
        }
Beispiel #2
0
        public static HtmlDocument Load(string document)
        {
            var root = new HtmlDocument();

            if (!string.IsNullOrWhiteSpace(document))
            {
                if (IsMarkup(document))
                {
                    document = Clean(document);

                    var reader = TagReader.Create(document);
                    AddFragments(reader, root, new Stack <string>());
                }
                else
                {
                    root.TryToAddText(new HtmlText
                    {
                        Content = document
                    });
                }
            }

            return(root);
        }