因此,我们在编辑模式下使用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字符串设置为该方法,并返回'suposed'正确的XHTML。但是,它没有通过XHTML检查,它返回的数据只是一个基本的
<html><head></head><body></body></html>
格式。因此,不适合XHTML。
那么,我如何格式化以实际输出正确的XHTML? MindShares站点上的SGML文档已经不多了,所以不知道从哪里开始。
基本上,我们需要WebBrowser控件中的HTML(无效的XHTML)输出到XHTML,以便我们可以将它附加到XMPP.msg.Html元素(仅限有效的XHTML)。如果系统检测到HTML中的任何代码无效,则会将XMPP.msg.Html标记为空白,因此我知道上述方法无效。
谢谢!
答案 0 :(得分:9)
建议使用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());