htmlagilitypack删除行属性

时间:2016-07-22 11:05:28

标签: html-agility-pack

我们如何从html中删除内联高度属性?

<tr style="height:2px;">
</tr>
<tr style="height:2px;">
</tr>

我只想从所有tr标签中删除高度属性。

提前多多感谢,

1 个答案:

答案 0 :(得分:0)

你可以:

  1. 如果您的Trs除了高度之外没有其他样式,您只需从它们的样式属性中删除它们(我注释掉的行)

  2. 否则,您可以编写类似下面的代码段来过滤要删除的样式键

    string html = @"<tr style='height:2px;'>
                    </tr>
                    <tr style='height:2px;'>
                    </tr>";
    
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);
    
        var trs = doc.DocumentNode.SelectNodes("tr");
    
        foreach (var tr in trs)
        {
            Console.WriteLine(tr.OuterHtml);
            //tr.Attributes.Remove("style");
    
            var filteredStyles = GetStyles(tr.GetAttributeValue("style"), "height");
            tr.SetAttributeValue("style", string.Join(":", filteredStyles));
    
            Console.WriteLine(tr.OuterHtml);
        }
    
  3. 辅助功能:

     private static List<string> GetStyles(string style, params string[] keysToRemove)
            {
                List<string> styles = new List<string>();
                var stylesKeyPairs = style.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
    
                if (keysToRemove != null)
                {
                    foreach (var styleKeyPair in stylesKeyPairs)
                    {
                        var styleKeys = styleKeyPair.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                        if (!keysToRemove.Contains(styleKeys.FirstOrDefault()))
                            styles.Add(styleKeyPair);
                    }
                }
                else
                    styles.AddRange(stylesKeyPairs);
    
                return styles;
            }
    

    输出(对于这两种解决方案,在这种情况下):

    enter image description here