gua*_*ome 16 vb.net asp.net html-agility-pack
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
更多信息:
在我添加之后doc.OptionWriteEmptyNodes = True,它正在移除我关闭的图像标签,它正在做这件事.
更新
这是我现在的代码,它删除了关闭的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)
Run Code Online (Sandbox Code Playgroud)
更新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)
Run Code Online (Sandbox Code Playgroud)
Sim*_*ier 21
这是因为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)
Run Code Online (Sandbox Code Playgroud)
将显示:
<test>before<br />after</test>
Run Code Online (Sandbox Code Playgroud)
小智 7
根据@Simon Mourier,以下C#代码适用于1.4版
var doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.OptionWriteEmptyNodes = true;
doc.LoadHtml("Lorem ipsum dolor sit<br/>Lorem ipsum dolor sit");
var postParsed = doc.DocumentNode.WriteTo();
Run Code Online (Sandbox Code Playgroud)
postParsed具有以下字符串值
"Lorem ipsum dolor sit<br />Lorem ipsum dolor sit"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6004 次 |
| 最近记录: |