HTML-Agility-pack entfernt Zeilenumbruch-tag schließen
Ich bin erstellen Sie ein HTML-Dokument mit HTML-agility-pack. Ich lade eine template-Datei, dann fügen Sie Inhalt hinzu. Das ganze funktioniert, aber wenn ich die Ausgabe Datei, die Sie entfernt das schließende tag aus meinem <br/>
tags zu schauen, wie diese <br>
. Was ist die Ursache?
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)
Mehr info:
Es war das entfernen meiner abschließenden Bild-tags, nachdem ich Hinzugefügt doc.OptionWriteEmptyNodes = True
, es ganz zu tun.
Update
Dies ist mein code wie es jetzt steht, entfernt werden, das schließen der BR-tag
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
Landete ich lese gerade in meiner template-Datei als standard-string dann das laden der html-wie dies
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)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es geschieht, weil die Html-Agility-Pack Griffe der BR in besonderer Weise. Es unterstützt weiterhin die alten (aber auf der web-heute) HTML-3.2-syntax, wo der BR deklariert werden könnte, ohne schließende Tags in allen Browsern auch noch behandeln, Sie anmutig durch die Art und Weise...).
Dieses Standardverhalten ändern, müssen Sie zum ändern der
HtmlNode.ElementFlags
Eigenschaft, wie das ist:angezeigt wird:
Als pro @Simon Mourier, der folgende C# - code funktioniert in der version 1.4
hat den folgenden string-Wert für postParsed
Scheint dies ist eine standard-Einstellung in Html Agility Pack. Standardmäßig, ist es nicht konform zu XHTML und viele tags sind nicht geschlossen.
Gibt es 2 Möglichkeiten, dies zu tun. Auf der Dokument-Ebene können Sie das folgende tun, das werden schalten Sie ALLE End-tags. (Dies ist meine bevorzugte Methode).
Jedoch kann dies nicht wünschenswert sein. Es gibt einen anderen Weg, es zu tun auf der Knoten-Ebene.
Den ich traf dieselbe Art von problem, und ich löste es, indem Sie manuell re-Parsen von HTML-chunk mit new HtmlDocument-Objekt mit den korrekten Einstellungen.
Problem wie ich es sehe ist, dass HtmlDocument hat alle diese schönen Einstellungen lassen Sie in der Nähe
tags etc, aber wenn Sie einen Knoten auswählen oder einige andere weiche Betrieb mit Knoten und verwenden Ihre OuterHtml oder InnerHtml einige von denen schließende tags sind verloren (wahrscheinlich, weil diese Eigenschaften nicht verwenden dieselben Einstellungen wie Dokument selbst, oder meybe es gibt einen anderen Grund). Also wenn du das falsche html-string von InnerHtml-oder OuterHtml, können Sie auch einfach re-analysiert mit HtmlDocument wieder und verwenden
document.DocumentElement.InnerHtml
korrekte HTML-string.