2011-09-01 14 views
7

Sto sostituendo uno script di testa che appartiene a un widget specifico. Voglio essere in grado di trovare tutti i nodi relativi a quel widget situato tra i commenti. Inoltre, voglio rimuovere facilmente qualsiasi codice relativo al widget specificato (tra cui il commento di inizio e fineHTMLAgilityPack Seleziona nodi tra i commenti

L'inserto e rimosso il codice sarà simile a questa:.

<!-- WidgetScript_WidgetName --> 

    <script src="Widgets/jquery.somecode.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
    $(function() { 
     $('.someid).dothis({parameter, avatar_size: 48, count: 6}); 
     }); 
    </script> 
    <link href="Widgets/jquery.somecode.css" media="all" rel="stylesheet" type="text/css"/> 

<!--WidgetScript_WidgetName End--> 

risposta

9

Provare a utilizzare il seguente:

var startNode = document.DocumentNode.SelectSingleNode("//comment()[contains(., 'WidgetScript_WidgetName')]"); 
var endNode = document.DocumentNode.SelectSingleNode("//comment()[contains(., 'WidgetScript_WidgetName End')]"); 
int startNodeIndex = startNode.ParentNode.ChildNodes.IndexOf(startNode); 
int endNodeIndex = endNode.ParentNode.ChildNodes.IndexOf(endNode); 

var nodes = startNode.ParentNode.ChildNodes.Where((n, index) => index >= startNodeIndex && index <= endNodeIndex).Select(n => n); 
+0

Funziona perfettamente. Grazie! – steve

3

Vorrei suggerire qualcosa di simile:

 var head = document.DocumentNode.SelectSingleNode("html/head"); 

     var nodes = new List<HtmlNode>(); 

     bool isComment = false; 
     foreach (var node in head.ChildNodes.ToList()) 
     { 
      if (node.NodeType == HtmlNodeType.Comment && 
       node.InnerText.Contains("WidgetScript_WidgetName")) 
      { 
       isComment = !isComment; 
       node.Remove(); 
      } 
      else if (isComment) 
      { 
       nodes.Add(node); 
       node.Remove(); 
      } 
     } 

     Console.WriteLine(head.InnerHtml); 

questo Remov es ogni nodo tra due commenti (e i commenti stessi).

+0

In realtà ho fatto una combinazione di questo e di @jdavies per trovare e rimuovere gli elementi. – steve

Problemi correlati