2011-09-01 8 views
7

मैं कुछ सिर स्क्रिप्ट है कि एक विशेष विजेट से संबंधित है की जगह कर रहा हूँ। मैं टिप्पणियों के बीच स्थित उस विजेट से संबंधित सभी नोड्स को खोजने में सक्षम होना चाहता हूं। इसके अलावा, मैं आसानी से निर्दिष्ट विजेट (प्रारंभ और अंत टिप्पणी सहित से संबंधित किसी भी कोड निकालना चाहतेHTMLAgilityPack चुनें नोड्स के बीच टिप्पणियाँ

डालने और हटाया कोड इस तरह दिखेगा:।

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

उत्तर

9

निम्नलिखित उपयोग करके देखें:

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

पूरी तरह से काम करता है। धन्यवाद! – steve

3

मैं कुछ इस तरह का सुझाव देते हैं:

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

यह remov दो टिप्पणियों के बीच हर नोड (और खुद टिप्पणियां) के बीच।

+0

मैंने वास्तव में तत्वों को खोजने और निकालने के लिए इस और @jdavies का संयोजन किया था। – steve