2017-03-23 1 views
1

Comment insérer une autre balise après une étiquette spécifique, et supprimer une baliseélément Ajouter au format html en utilisant htmlagilitypack

exemple, j'ai ce html

<p class="cs40314EBF"><span class="cs1B16EEB5">This is an ordinary text.</span></p> 

et c'est la sortie possible

<p class="cs40314EBF"><b>This is an ordinary text.</b></p> 

ceci est mon code

HtmlDocument doc = new HtmlDocument(); 
       doc.Load(htmlLocation); 
foreach (var item in doc.DocumentNode.Descendants()) 
{ 

    if (item.Name == "span") 
    { 
     HtmlNode div = doc.CreateElement("b"); 
     //what do i need to do here? 
    } 
} 

je l'ai fait une recherche et trouvé ce

http://www.nudoq.org/#!/Packages/HtmlAgilityPack/HtmlAgilityPack/HtmlNode/M/InsertBefore 

mais je ne peux pas le faire fonctionner.

je ne peux pas utiliser

if (item.Name == "span") 
    { 

     item.Name = "newtag"; 
    } 

parce que je besoin de la valeur de la classe. pour décider quel tag je vais utiliser

Répondre

3

Veuillez vérifier le code ci-dessous, vous devez définir InnerHtml et enregistrer le document Html en appelant la méthode de sauvegarde doc.Save(yourfilepath).

if (item.Name == "span") 
{ 
    HtmlNode div = doc.CreateElement("b"); 
    div.InnerHtml = "Hello world"; 
    item.AppendChild(div); 
    doc.Save(yourfilepath); 
} 
+0

cela ne fonctionne pas. J'ai déjà essayé un code similaire à celui-ci avant de poster ici. Et j'ai essayé encore avec votre code posté, et cela ne fonctionne pas. ça ne me donne pas d'erreur. je vérifie même si le statut if est déclenché –

1

Pouvez-vous essayer?

var doc1 = new HtmlAgilityPack.HtmlDocument(); 
    doc1.LoadHtml("<p class=\"cs40314EBF\"><span class=\"cs1B16EEB5\">This is an ordinary text.</span></p>"); 

    foreach (var item in doc1.DocumentNode.Descendants()) 
    { 
     if (item.Name == "span") 
     { 
      HtmlNode b = doc.CreateElement("b"); 
      b.InnerHtml = item.InnerText; 
      item.ParentNode.AppendChild(b); 
      item.Remove(); 
     } 
    }