C# 操作html下的css样式

需求:需要给table添加样式,默认的table没有边框

AngleSharp

https://anglesharp.github.io/

给表格添加边框

没有添加样式的时候

html 复制代码
<table>
    <colgroup>
        <col style="width: 54.17%;">
        <col style="width: 45.83%;">
    </colgroup>
    <tbody>
        <tr>
            <td rowspan="2" style="height: 13.5pt; width: 175.5pt;">111</td>
            <td style="width: 148.5pt;">222</td>
        </tr>
        <tr>
            <td>444</td>
        </tr>
    </tbody>
</table>

添加样式border-collapse: collapse; border: 1px solid rgb(102, 102, 102);实现边框

代码如下

cs 复制代码
using AngleSharp;
using AngleSharp.Css.Dom;
using AngleSharp.Dom;
using AngleSharp.Html.Parser;
using System;
using System.Linq;

namespace MailStu10
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var html = @"<table>
    <colgroup>
        <col style=""width: 54.17%;"">
        <col style=""width: 45.83%;"">
    </colgroup>
    <tbody>
        <tr>
            <td rowspan=""2"" style=""height: 13.5pt; width: 175.5pt;"">111</td>
            <td style=""width: 148.5pt;"">222</td>
        </tr>
        <tr>
            <td>444</td>
        </tr>
    </tbody>
</table>";
            Console.WriteLine(html);
            var config = Configuration.Default.WithDefaultLoader().WithCss();
            IBrowsingContext context = BrowsingContext.New(config);
            var parser = new HtmlParser(new HtmlParserOptions(),context);
            var htmlDocument = parser.ParseDocument(html);
            var tables = htmlDocument.QuerySelectorAll("table");
            if (tables != null && tables.Any())
            {
                foreach (var table in tables)
                {
                    var tableStyle = table.GetStyle();
                    if (tableStyle != null)
                    {
                        tableStyle.SetBorderCollapse("collapse");
                        tableStyle.SetBorderWidth("1px");
                        tableStyle.SetBorderColor("#000");
                        tableStyle.SetBorderStyle("solid");
                    }
                    else
                    {
                        //如果style不存在则直接将css样式植入
                        table.SetStyle("border-collapse: collapse; border: 1px solid #000;");
                    }
                    var tdList = table.QuerySelectorAll("td");
                    foreach (var td in tdList)
                    {
                        var tdStyle = td.GetStyle();
                        if (tdStyle != null)
                        {
                            tdStyle.SetBorderCollapse("collapse");
                            tdStyle.SetBorderWidth("1px");
                            tdStyle.SetBorderColor("#000");
                            tdStyle.SetBorderStyle("solid");
                        }
                        else
                        {
                            //如果style不存在则直接将css样式植入
                            td.SetStyle("border-collapse: collapse; border: 1px solid #000;");
                        }
                    }
                }
            }

            if (htmlDocument.Body != null)
            {
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("结果");
                Console.WriteLine(htmlDocument.Body.InnerHtml);
            }
            
            Console.ReadKey();
        }
    }
}


去除图片的宽度限制

安装包版本

xml 复制代码
  <ItemGroup>
    <PackageReference Include="AngleSharp" Version="1.3.0-beta.470" />
    <PackageReference Include="AngleSharp.Css" Version="1.0.0-beta.151" />
  </ItemGroup>

代码

cs 复制代码
using AngleSharp.Css.Parser;
using AngleSharp;
using AngleSharp.Html.Parser;
using AngleSharp.Css.Dom;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var htmlData = """
                <p><img class="image_resized" style="width:790px;" src="https://files.nsts.mvccms.cn/Upload/20210515/20210515152916_8509.jpg" alt=""><img class="image_resized" style="width:790px;" src="https://files.nsts.mvccms.cn/Upload/20210515/20210515153029_9192.jpg" alt=""><img class="image_resized" style="width:790px;" src="https://files.nsts.mvccms.cn/Upload/20210515/20210515153053_6518.jpg" alt=""><img class="image_resized" style="width:790px;" src="https://files.nsts.mvccms.cn/Upload/20210515/20210515153115_9184.jpg" alt=""><img class="image_resized" style="width:790px;" src="https://files.nsts.mvccms.cn/Upload/20210515/20210515153141_3887.jpg" alt=""><img class="image_resized" style="width:790px;" src="https://files.nsts.mvccms.cn/Upload/20210515/20210515153210_9167.jpg" alt=""></p>
                """;
            Console.WriteLine(htmlData);
            // 创建 HTML 解析器
            var config = Configuration.Default.WithDefaultLoader().WithCss();
            IBrowsingContext context = BrowsingContext.New(config);
            var htmlParser = new HtmlParser(new HtmlParserOptions(), context);
            var document = htmlParser.ParseDocument(htmlData);
            // 查找所有 img 元素
            var imgElements = document.QuerySelectorAll("img");
            // 创建 CSS 解析器
            var cssParser = new CssParser();

            foreach (var img in imgElements)
            {
                var imgStyle = img.GetStyle();
                imgStyle.RemoveProperty("width");
            }
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("结果");
            Console.WriteLine(document.ToHtml());
            if (document.Body != null)
            {
                Console.WriteLine();
                Console.WriteLine(document.Body.ToHtml());
                Console.WriteLine();
                Console.WriteLine(document.Body.InnerHtml);
            }
        }
    }
}

参考

https://github.com/AngleSharp/AngleSharp
https://anglesharp.github.io/docs/01-articles

相关推荐
m0_5474866629 分钟前
《HTML+CSS+JavaScript+Vue前端开发技术教程》全套PPT课件
javascript·css·html
gCode Teacher 格码致知1 小时前
Javascript技术:CSS 中rem、vh 和 px各有其最佳适用场景-由Deepseek产生
开发语言·javascript·css
fastjson_2 小时前
Edge浏览器开启IE兼容模式
javascript·edge·html
z落落4 小时前
C#ToolStrip+StatusStrip 状态栏实时显示系统时间+NotifyIcon系统托盘
开发语言·c#
qq_419854055 小时前
css filter
前端·javascript·css
ctrl_v助手5 小时前
VisionPro (R) QuickBuild相机的连接
服务器·笔记·数码相机·c#
艾伦野鸽ggg6 小时前
web 组大一下第二次考核
前端·css·html
北域码匠6 小时前
奇偶归并排序:并行计算的排序利器
数据结构·算法·c#·排序算法
川石课堂软件测试6 小时前
APP自动化测试|高级手势操作&toast操作
css·功能测试·测试工具·microsoft·fiddler·单元测试·harmonyos
zhangfeng11337 小时前
国家超算中心 昆山站 异构加速卡1 显存16GB详细配置, 海光 Z100SM HCU
linux·网络·深度学习·c#