2011-09-01 25 views
7

Estoy reemplazando algunos guiones principales que pertenecen a un widget específico. Quiero ser capaz de encontrar todos los nodos relacionados con ese widget ubicado entre los comentarios. Además, quiero quitar fácilmente cualquier código relacionado con el widget especificado (incluyendo el comentario de inicio y finHTMLAgilityPack Seleccionar nodos entre comentarios

El inserto y quité código se verá así:.

<!-- 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--> 

Respuesta

9

Trate de usar la siguiente:

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

Funciona perfectamente. ¡Gracias! – steve

3

yo sugeriría algo como esto:

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

este remov es cada nodo entre dos comentarios (y los comentarios mismos).

+0

De hecho, hice una combinación de esto y @jdavies para encontrar y eliminar los elementos. – steve

Cuestiones relacionadas