C'è un modo per sostituire i nodi html con i nodi di testo usando HTMLAgilityPack?

c# dom html html-agility-pack

Domanda

Vorrei utilizzare il pacchetto HTMLAgility per sostituire un nodo all'interno del documento con un nodo di testo. Lo scopo di questo è rimuovere i tag che circondano il nodo stesso. Attualmente, faccio qualcosa del genere:

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

C'è un modo migliore per farlo? Se provo a creare un nuovo nodo di testo e poi faccio qualcosa di simile allo snippet di codice di seguito, ricevo un errore di cast non valido:

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

(aggiornato dopo che è stato segnalato un errore di battitura, tuttavia il problema rimane)

Sto usando il metodo sbagliato? C'è un altro metodo che dovrei usare per eseguire funzioni come questa? Grazie.

Risposta popolare

Lo scopo di questo è rimuovere i tag che circondano il nodo stesso

Il tuo secondo codice snippato esegue esattamente la rimozione dei tag tranne un errore di battitura (credo):

HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);

Dovresti sostituire hNewNode.InnerHtml da hChildNode.InnerHtml altrimenti il ​​tuo codice non verrà nemmeno compilato (uso della variabile non assegnata).

Voglio anche menzionare, dopo la creazione del nodo di testo, che non avrà nodi figli di quello sostituito (invece di questo avrà lo stesso valore per la proprietà InnerHtml con il nodo sostituito).




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é