2011-09-01 19 views
7

Belirli bir widget ile ilgili bazı komut dosyalarını değiştiriyorum. Yorumlar arasında bulunan bu widget ile ilgili tüm düğümleri bulmak istiyorum. . Ayrıca, benHTMLAgilityPack Yorumlar Arasındaki Düğmeleri Seç

insert kolayca başlangıç ​​ve bitiş Yorum dahil belirtilen widget'ından (ilgili herhangi bir kod kaldırmak istediğiniz ve kod aşağıdaki gibi görünecektir kaldırıldı:

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

cevap

9

aşağıdaki kullanmayı deneyin:

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); 
böyle bir şey
+0

Mükemmel çalışır. Teşekkür ederim! – steve

3

öneririm :

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

Bu remov iki yorum arasındaki her düğüm (ve yorumların kendileri).

+0

Aslında bu ve Jdavies öğelerinin bir bileşimini bulmak ve kaldırmak için yaptım. – steve