Как заменить разрывы строк на допустимый 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 (см. LI в теге UL)

Я могу легко заменить BR, используя regx или text.Replace(Environment.NewLine, "<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
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow