我正在使用 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
,它确实这样做了。
Update
这是我现在的代码,删除了结束 BR 标签
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)
Update 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)