从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标记为空白,所以我知道上面的方法不起作用。
谢谢!
将使用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());