我正在使用HTML敏捷包创建一个HTML文档.我加载一个模板文件,然后附加内容.所有这些都有效,但是当我查看输出文件时,它已经从我的< br />标签看起来像这样< br> ;.是什么原因造成的?
Dim doc As New HtmlDocument() doc.Load(Server.MapPath("Template.htm")) Dim title As HtmlNode = doc.DocumentNode.SelectSingleNode("//title") title.InnerHtml = title.InnerHtml & "CEU Classes" Dim topContent As HtmlAgilityPack.HtmlNode = doc.GetElementbyId("topContent") topContent.InnerHtml = html.ToString doc.OptionWriteEmptyNodes = True doc.Save(outputFileName,Encoding.UTF8)
更多信息:
在我添加了doc.OptionWriteEmptyNodes = True之后,正在删除我的关闭图像标签,这样做很好.
更新
Dim html As String = "Words<br/>more words" Dim doc As New HtmlDocument() Dim title As HtmlNode Dim topContent As HtmlNode HtmlNode.ElementsFlags("br") = HtmlElementFlag.Empty doc.Load(Server.MapPath("Template.htm")) Title = doc.DocumentNode.SelectSingleNode("//title") title.InnerHtml = title.InnerHtml & "CEU Classes" topContent = doc.GetElementbyId("topContent") topContent.InnerHtml = html.ToString doc.OptionWriteEmptyNodes = True doc.Save(outputFileName,Encoding.UTF8)
更新2
我最终只是在我的模板文件中读取标准字符串,然后加载这样的HTML
Dim TemplateHTML As String = File.ReadAllText(Server.MapPath("Template.htm")) TemplateHTML = TemplateHTML.Insert(TemplateHTML.IndexOf("<div id=""topContent"">") + "<div id=""topContent"">".Length,_ html.ToString) doc.LoadHtml(TemplateHTML)
解决方法
这是因为Html Agility Pack以特殊的方式处理BR.它仍然支持旧的(但现在在网络上)HTML 3.2语法,BR可以声明没有结束标签(浏览器也仍然通过…优雅地处理它).
要更改此默认行为,您需要修改HtmlNode.ElementFlags属性,如下所示:
Dim doc As New HtmlDocument() HtmlNode.ElementsFlags("br") = HtmlElementFlag.Empty doc.LoadHtml("<test>before<br/>after</test>") doc.OptionWriteEmptyNodes = True doc.Save(Console.Out)
将显示:
<test>before<br />after</test>