Come faccio a sostituire le interruzioni di riga con html valido, ma non quando sono già in un elemento html

c# html-agility-pack

Domanda

Ho un testo semplice che contiene interruzioni di riga come questa:

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

Vorrei utilizzare il pacchetto HtmlAgility (se necessario) per pulire l'Html e sostituire le nuove interruzioni di riga, con BR eccetto dove si trovano già in un tag HTML (vedere la LI nel tag UL)

Posso facilmente sostituire il BR usando regx o text.Replace(Environment.NewLine, "<br/>") ma come escludo lo scenario in cui si trova in un tag?

Grazie.

Risposta popolare

Sembra che sia necessario elaborare solo nodi di testo HTML di livello superiore (i nodi di testo non hanno nodi figli):

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

Questo produrrà qualcosa di simile a questo:

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

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché