使用 c# 编辑 HTML 并替换其中的某些文本

Posted

技术标签:

【中文标题】使用 c# 编辑 HTML 并替换其中的某些文本【英文标题】:Editing HTML and replacing certain texts inside it using c# 【发布时间】:2011-08-14 14:21:50 【问题描述】:

在我的 C# WinForms 程序中,我想生成一个 html 格式的报告。我现在正在做的是使用 StringBuilder 和 TextWriter 并编写所有 html 代码并将文件保存为 HTML。它正在工作,但我想改进工作流程。

所以我的想法是创建一个带有某些文本的 HTML 模板,这些文本将被特殊标签或其他东西替换(我之前使用过 Smarty 模板,所以我的意思是这样的)。

想象一下下面的 HTML 代码:

        <tr>
        <td style="height: 80px; background-color:#F4FAFF">
        <span class="testPropertiesTitle">Test Properties</span>
        <br /><br />
        <span class="headerComment"><b>Test Mode:</b>&nbsp;[TestMode]</span>    
        <br /><br />    
        <span class="headerComment"><b>Referenced DUT:</b>&nbsp;[RefDUT]</span> 
        <br /><br />                        
        <span class="headerComment"><b>Voltage Failure Limit:</b>&nbsp;[VoltageLimit]</span>            
        <br /><br />
        <span class="headerComment"><b>Current Failure Limit:</b>&nbsp;[CurrentLimit]</span>
        <br /><br />
        <span class="headerComment"><b>Test Mode:</b>[TestMode]&nbsp;</span>                        
        </td>
    </tr>

所以基本上我想要做的是用我的 C# 程序中生成的某些字符串替换上面 html 中 [] 之间的文本。

任何想法、代码 sn-ps、教程链接等...都将得到应用!

【问题讨论】:

【参考方案1】:

使用正则表达式或快速而肮脏的替换来解析 HTML 存在很大的危险。如果 HTML 已正确“准备”,那么很多事情都可能出错(这对于 100% 的确定性来说是一件困难的事情。)Milde 的回答中提到的 HTML Agility Pack 是一个很好的方法,但它可能感觉像使用大锤敲开一个螺母。

但是,如果您对将要解析的 HTML 充满信心,那么以下内容应该可以帮助您快速完成:

     string strTextToReplace = "<tr><td style=\"height: 80px; background-color:#F4FAFF\"> <span class=\"testPropertiesTitle\">Test Properties</span><br /><br /><span class=\"headerComment\"><b>Test Mode:</b>&nbsp;[TestMode]</span><br /><br /><span class=\"headerComment\"><b>Referenced DUT:</b>&nbsp;[RefDUT]</span><br/><br/><span class=\"headerComment\"><b>Voltage Failure Limit:</b>&nbsp;[VoltageLimit]</span><br /><br /><span class=\"headerComment\"><b>Current Failure Limit:</b>&nbsp;[CurrentLimit]</span><br /><br /><span class=\"headerComment\"><b>Test Mode:</b>[TestMode]&nbsp;</span>  </td></tr>";

            Regex re = new Regex(@"\[(.*?)\]");
            MatchCollection mc = re.Matches(strTextToReplace);
            foreach (Match m in mc)
            
                switch (m.Value)
                
                    case "[TestMode]":
                        strTextToReplace = strTextToReplace.Replace(m.Value, "-- New Test Mode --");
                        break;
                    case "[RefDUT]":
                        strTextToReplace = strTextToReplace.Replace(m.Value, "-- New Ref DUT --");
                        break;
                    //Add additional CASE statements here
                    default:
                        break;
                
            

【讨论】:

非常感谢 :P 是的,我的情况只有几行 HTML,这样我的生活会更轻松!【参考方案2】:

看看HTML Agility Pack:

它是一个 .NET 代码库,可让您解析“网络外”的 HTML 文件。解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.Xml 的提议非常相似,但用于 HTML 文档(或流)。

【讨论】:

【参考方案3】:

看看 razor 模板引擎 http://razorengine.codeplex.com/

【讨论】:

以上是关于使用 c# 编辑 HTML 并替换其中的某些文本的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中的选定文本位置之前和之后插入 HTML TAG

查找并替换所有以 # 开头的单词,并将标签文本包装在 HTML 中

无法用java替换html字符串中的某些文本

如何检测windows窗体中的控件并对其进行编辑c#

c#如何使一个文本框变为不可编辑?但是又可以复制里面的数据?

求C# HTML源文件中的非HTML标签文本的替换方法