如何用有效的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>


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因