¿Cómo sustituyo los saltos de línea con html válido pero no cuando ya estoy en un elemento html?

c# html-agility-pack

Pregunta

Tengo un texto plano que contiene saltos de línea como este:

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

Me gustaría usar el paquete HtmlAgility (si es necesario) para limpiar el Html y reemplazar los nuevos saltos de línea, con BR, excepto donde ya están en una etiqueta HTML (consulte la LI en la etiqueta UL)

Puedo reemplazar fácilmente la BR usando regx o text.Replace(Environment.NewLine, "<br/>") pero, ¿cómo excluyo el escenario en el que está en una etiqueta?

Gracias.

Respuesta popular

Parece que necesita procesar solo nodos de texto HTML de nivel superior (los nodos de texto no tienen nodos secundarios):

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

Esto producirá algo como esto:

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

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué