2012-11-18 17 views
13

इम निम्न विधि का उपयोग कर निकालने के लिए पाठ के रूप एचटीएमएल:htmlagilitypack - स्क्रिप्ट और शैली को हटाएं?

public string getAllText(string _html) 
    { 
     string _allText = ""; 
     try 
     { 
      HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
      document.LoadHtml(_html); 


      var root = document.DocumentNode; 
      var sb = new StringBuilder(); 
      foreach (var node in root.DescendantNodesAndSelf()) 
      { 
       if (!node.HasChildNodes) 
       { 
        string text = node.InnerText; 
        if (!string.IsNullOrEmpty(text)) 
         sb.AppendLine(text.Trim()); 
       } 
      } 

      _allText = sb.ToString(); 

     } 
     catch (Exception) 
     { 
     } 

     _allText = System.Web.HttpUtility.HtmlDecode(_allText); 

     return _allText; 
    } 

समस्या है कि मैं भी स्क्रिप्ट और स्टाइल टैग मिलता है।

मैं उन्हें कैसे बाहर निकाल सकता हूं?

+0

के बारे में क्या एक इनलाइन शैली अर्थात

? मैं इसे OuterHtml में देखता हूं लेकिन सभी इनलाइन शैलियों को भी बाहर करना चाहता हूं। – Jeremy

+1

'अगर (childNode.Attributes.Contains (" शैली ")) { childNode.Attributes.Remove (" शैली "); } अगर (childNode.Attributes.Contains ("वर्ग")) { childNode.Attributes.Remove ("वर्ग"); } ' – Jeremy

उत्तर

41
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

doc.DocumentNode.Descendants() 
       .Where(n => n.Name == "script" || n.Name == "style") 
       .ToList() 
       .ForEach(n => n.Remove()); 
+0

मैं इसके माध्यम से कैसे प्रचार करूं? – Jacqueline

+0

@Jacqueline जब आप कोड से ऊपर चलाते हैं। सभी 'स्क्रिप्ट' और 'स्टाइल' टैग' doc' –

+0

आह से हटा दिए जाएंगे, क्या मैं देखता हूं, क्या इसे जैसी टिप्पणियों का समर्थन करने के लिए भी विस्तारित किया जा सकता है? – Jacqueline

4

तुम इतनी HtmlDocument वर्ग का उपयोग कर सकते हैं:

HtmlDocument doc = new HtmlDocument(); 

doc.LoadHtml(input); 

doc.DocumentNode.SelectNodes("//style|//script").ToList().ForEach(n => n.Remove()); 
+0

यह 'नहीं होना चाहिए doc.DocumentNode.SelectNodes (" // शैली | // स्क्रिप्ट ") ToList() foreach (n => n.Remove())।। '? – Rubanov

+0

@ रूबानोव हाँ यह होना चाहिए, मेरे पास एक विस्तार विधि थी इसलिए मुझे अपने कोड में टॉलिस्ट की आवश्यकता नहीं थी। उत्तर अपडेट, धन्यवाद। – johnw86

1

कुछ उत्कृष्ट जवाब, System.Linq काम है!

एक गैर Linq आधारित दृष्टिकोण के लिए:

private HtmlAgilityPack.HtmlDocument RemoveScripts(HtmlAgilityPack.HtmlDocument webDocument) 
{ 

// Get all Nodes: script 
HtmlAgilityPack.HtmlNodeCollection Nodes = webDocument.DocumentNode.SelectNodes("//script"); 

// Make sure not Null: 
if (Nodes == null) 
    return webDocument; 

// Remove all Nodes: 
foreach (HtmlNode node in Nodes) 
    node.Remove(); 

return webDocument; 

} 
संबंधित मुद्दे