从WebBrowser到有效XHTML的C#HTML

本文关键字:C#HTML XHTML 有效 WebBrowser | 更新日期: 2023-09-27 18:00:21

因此,我们在编辑模式下使用webBrowser控件,允许人们输入文本,然后将文本发送到服务器,让每个人都能看到。IE,它是一个HTML输入框。

该框的HTML输出不是标准XHTML,因为它只是一个webBrowser控件,所以我需要一种方法将任何糟糕的HTML转换为XHTML。我阅读了SGML,随后使用了:

private static string Html2Xml(string txtHtmlString)
    {
        var xhtml = new Sgml.SgmlReader();
        var sw = new StringWriter();
        var w = new XmlTextWriter(sw);
        xhtml.DocType = "HTML";
        xhtml.InputStream = new StringReader(txtHtmlString);
        while ((!xhtml.EOF))
        {
            w.WriteNode(xhtml, true);
        }
        w.Close();
        return sw.ToString();
    }

我基本上将HTML字符串粘贴到该方法中,它会返回"supposed"正确的XHTML。然而,它并没有通过XHTML检查,它返回的数据只是一个基本的

<html><head></head><body></body></html> 

格式。因此,不是合适的XHTML。

那么,我如何格式化它以实际输出正确的XHTML呢?MindShares网站上已经没有太多SGML文档了,所以不确定该从哪里开始。

从本质上讲,我们需要WebBrowser控件中的HTML(它不是有效的XHTML)输出到XHTML,这样我们就可以将它附加到XMPP.msg.HTML元素(仅限有效XHTML)。如果系统检测到HTML中的任何代码都是无效的,它会将XMPP.msg.HTML标记为空白,所以我知道上面的方法不起作用。

谢谢!

从WebBrowser到有效XHTML的C#HTML

将使用TinyMCE或HtmlAgilityPack(可作为Nuget包或从codeplex获得)之类的东西进行回收。

TinyMCE允许用户使用适当的格式控件执行富文本编辑,并将输出结果Html。

另一方面,HtmlAgilityPAck是一个库,它将允许您传入由方法生成的HtmlStream,并将其作为有效的Xhtml流输出。

在HtmlAgilityPAck中处理此问题的粗略示例如下:

var sb = new StringBuilder(); 
var stringWriter = new StringWriter(sb);
string input = "<html><body><p>This is some test test<ul><li>item 1<li>item2<</ul></body>";
var test = new HtmlAgilityPack.HtmlDocument();
test.LoadHtml(input);
test.OptionOutputAsXml = true;
test.OptionCheckSyntax = true;
test.OptionFixNestedTags = true;
test.Save(stringWriter);
Console.WriteLine(sb.ToString());