如何用有效的html替換換行符,但在html元素中卻沒有

c# html-agility-pack

我有一些純文本,其中包含這樣的換行符:

Dear Person,\r\nHello and welcome to this example.\r\nTodo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.

我想使用HtmlAgility包(如果需要)來清理Html並用BR替換新的換行符,除非它們已經在HTML標籤中(參見UL標籤中的LI)

我可以使用regx或text.Replace(Environment.NewLine, "<br/>")輕鬆替換BR但是如何排除它在標記中的場景?

謝謝。

熱門答案

您似乎只需要處理頂級HTML文本節點(文本節點沒有子節點):

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 />");

這會產生這樣的東西:

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>


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因