Die von uns verwendete Exportanwendung für den dritten Teil rendert die Absatztags nicht korrekt (die zusätzliche Zeile zwischen den Absätzen wird nicht berücksichtigt). Daher versuche ich, alle Absatztags durch HtmlAgilityPack mit zwei Zeilenumbruch-Tags zu ersetzen.
Hier ist was ich bisher habe ...
// Shortened for this example
string rawHtml = "<p><strong><span>1.0 Purpose</span></strong></p><p><span>The role</span></p><p><span>NOTE: Defined...</span></p>";
HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(rawHtml);
doc.OptionWriteEmptyNodes = true;
// Updated using suggestion from Petr
HtmlNode linebreak = doc.CreateElement("br");
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
HtmlNode childNode = HtmlNode.CreateNode(paragraphTags[i].InnerHtml);
HtmlNode nextNode = paragraphTags[i];
if (i > 0)
{
nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
}
doc.DocumentNode.InsertAfter(childNode, nextNode);
paragraphTags[i].Remove();
}
Es entfernt zwar das Absatz-Tag, gibt aber nur einen Zeilenumbruch wieder. Ich habe das Internet durchsucht, um so weit wie möglich zu kommen, aber nichts scheint zu funktionieren.
OuterHtml sieht so aus ....
<strong><span>1.0 Purpose</span></strong><br /><span>The role</span><br /><span>NOTE: Defined...</span>
Irgendeine Idee, was ich falsch mache? Ich habe das Gefühl, dass es einen einfacheren Weg geben muss, oder?
Herausgefunden. Upvote an Petr und Simon für die Vorschläge. Der Schlüssel schien zu sein, dass ich zwei verschiedene Zeilenumbruchknoten benötigte.
string rawHtml = "<p><strong><span>1.0 Purpose</span></strong></p><p><span>The role</span></p><p><span>NOTE: Defined...</span></p>";
HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(rawHtml);
doc.OptionWriteEmptyNodes = true;
HtmlNode linebreak1 = doc.CreateElement("br");
HtmlNode linebreak2 = doc.CreateElement("br");
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
if (i > 0)
{
doc.DocumentNode.InsertBefore(linebreak1, paragraphTags[i]);
doc.DocumentNode.InsertBefore(linebreak2, paragraphTags[i]);
}
doc.DocumentNode.InsertBefore(HtmlNode.CreateNode(paragraphTags[i].InnerHtml), paragraphTags[i]);
paragraphTags[i].ParentNode.RemoveChild(paragraphTags[i]);
}
Hilft es, wenn du es benutzt?
HtmlNode linebreak = doc.CreateElement("br");
Linebreak-Knoten erstellen?