Beispiel #1
0
        public void ParseHtml(object sender, RoutedEventArgs e)
        {
            Tokens.Items.Clear();
            ReconstructedHTML.Clear();
            ParseErrors.Items.Clear();

            using (TextReader stringReader = new StringReader(HtmlInput.Text))
            {
                using (HtmlTokenizer tokenizer = new Tokenizer(
                    Fragment.IsChecked.HasValue && Fragment.IsChecked.Value
                        ? new HtmlTextTokenizer(stringReader, FragmentContainer.Text)
                        : new HtmlTextTokenizer(stringReader),
                    Tokens)) {
                    using (HtmlReader reader = new HtmlReader(tokenizer)) {
                        reader.ParseError += new EventHandler<ParseErrorEventArgs>(reader_ParseError);

                        while (reader.Read()) {
                            switch (reader.NodeType) {
                            case XmlNodeType.Text:
                            case XmlNodeType.Whitespace:
                            case XmlNodeType.SignificantWhitespace:
                                ReconstructedHTML.AppendText(reader.Value);
                                break;
                            case XmlNodeType.Comment:
                                ReconstructedHTML.AppendText("<!--");
                                ReconstructedHTML.AppendText(reader.Value);
                                ReconstructedHTML.AppendText("-->");
                                break;
                            case XmlNodeType.Element:
                                ReconstructedHTML.AppendText("<");
                                ReconstructedHTML.AppendText(reader.Name);
                                if (reader.MoveToFirstAttribute()) {
                                    do {
                                        ReconstructedHTML.AppendText(" ");
                                        ReconstructedHTML.AppendText(reader.Name);
                                        ReconstructedHTML.AppendText("=");
                                        ReconstructedHTML.AppendText(reader.QuoteChar.ToString());
                                        ReconstructedHTML.AppendText(reader.Value);
                                        ReconstructedHTML.AppendText(reader.QuoteChar.ToString());
                                    } while (reader.MoveToNextAttribute());
                                }
                                ReconstructedHTML.AppendText(">");
                                break;
                            case XmlNodeType.EndElement:
                                ReconstructedHTML.AppendText("</");
                                ReconstructedHTML.AppendText(reader.Name);
                                ReconstructedHTML.AppendText(">");
                                break;
                            default:
                                ReconstructedHTML.AppendText("###");
                                ReconstructedHTML.AppendText(Enum.GetName(typeof(XmlNodeType), reader.NodeType));
                                ReconstructedHTML.AppendText("###");
                                break;
                            }
                        }
                    }
                }
            }
        }