c#
  • html
  • html-agility-pack
  • 2015-06-19 64 views 1 likes 
    1

    我想從我的htmlNode刪除所有的HTML註釋標記,下列標記是從我的C#的HtmlNode選擇代碼如何替換HTML註釋<! - 註釋 - >用的String.Empty

    HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']"); 
    

    回以下

    <table> 
        <tr> 
        <td>test</td> 
        <td> 
         <!-- <a href='url removed' >Test link Test 2 Comment </a> --> 
        </td> 
        </tr> 
    </table>​ 
    

    我設法配置的正則表達式來解決我的問題HtmlNode僞標記代碼,C#代碼如下。但是,只有在我的測試運行中,它才能成功運行,輸入類型爲字符串。請參閱下面的C#代碼。

    string rkr; 
    rkr = "<!-- <a href='url removed' >Test link Test 2 Comment </a> -->"; 
    rkr = Regex.Replace(rkr, @"(\<!--\s*.*?((--\>)|$))",String.Empty); 
    

    Result =「」。這是我想要的所有標籤的實時運行。

    我在論壇和stackoverflow論壇上看到了很多代碼示例。但沒有什麼是接近我想要的。一篇文章非常有用,但它是用於PHP的 - 所以再次沒用。現在

    ,如果在上述Regex.Replace功能我進入

    rkr = Regex.Replace(table, @"(\<!--\s*.*?((--\>)|$))",String.Empty); 
    

    我收到以下錯誤

    的最佳重載的方法匹配 「System.Text.RegularExpressions.Regex.Replace (字符串, System.Text.RegularExpressions.MatchEvaluator,int)'有一些無效 論據

    我也試圖

    rkr = Regex.Replace(table.ToString(), @"(\<!--\s*.*?((--\>)|$))",String.Empty); 
    

    轉換,但後來我得到RKR = 「HtmlAgilityPack.HtmlNode」 返回值。

    任何幫助將是很大的幫助。

    回答

    0

    謝謝大家的幫助。我發現以下功能的解決方案。

    填充doc5如下

    HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']"); 
    
    RemoveComments(table); 
    
    public static void RemoveComments(HtmlNode node) 
    { 
        foreach (var n in node.ChildNodes.ToArray()) 
         RemoveComments(n); 
        if (node.NodeType == HtmlNodeType.Comment) 
         node.Remove(); 
    } 
    

    僅供參考剛過調用的函數:我發現在以下職位的答案。 How to select node types which are HtmlNodeType Comment using HTMLAgilityPack

    非常精確,並有很多不同的示例類型,正是我以前的樣子。

    0

    回答here

    doc5.DocumentNode.Descendants() 
        .Where(n => n.NodeType == HtmlAgilityPack.HtmlNodeType.Comment) 
        .ToList() 
        .ForEach(n => n.Remove()); 
    

    注:ToList是必要的,因爲你不能改變你列舉的順序。

    +0

    你的意思是我使用了上面的建議答案,符合我的代碼HtmlNode table = doc5.DocumentNode.SelectSingleNode(「// div [@ id ='div12']」); – Jag

    相關問題