Ich habe einen einfachen Text, der Zeilenumbrüche wie folgt enthält:
Dear Person,\r\nHello and welcome to this example.\r\nTodo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.
Ich möchte das HtmlAgility-Paket (falls erforderlich) verwenden, um den HTML-Code zu bereinigen und die neuen Zeilenumbrüche durch BR zu ersetzen, außer dort, wo sie sich bereits in einem HTML-Tag befinden (siehe LI im UL-Tag).
Ich kann das BR leicht ersetzen, indem ich regx oder text.Replace(Environment.NewLine, "<br/>")
aber wie schließe ich das Szenario aus, in dem es in einem Umbau ist?
Vielen Dank.
Es scheint, dass Sie nur HTML-Textknoten der obersten Ebene verarbeiten müssen (Textknoten haben keine untergeordneten Knoten):
var html = "Dear Person,\r\nHello and welcome to this example.\r\nTodo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var textNodes = doc.DocumentNode.ChildNodes
.OfType<HtmlTextNode>()
.ToList();
foreach (var node in textNodes)
node.Text = node.Text.Replace(Environment.NewLine, "<br />");
Dies wird etwa so aussehen:
Dear Person,<br />Hello and welcome to this example.<br />Todo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.</ul>