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

本文关键字:文本 替换 编辑 HTML 使用 | 更新日期: 2023-09-27 17:54:04

在我的c# WinForms程序中,我想生成一个HTML格式的报表。我现在正在做的是使用StringBuilder和textwwriter并编写所有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中的[]之间的文本。

任何想法,代码片段,教程链接等…将不胜感激!

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

使用regex或快速而肮脏的替换来解析HTML是非常危险的。如果HTML被正确地"准备"(这是一件很难100%确定的事情),那么很多事情都可能出错。在Milde的回答中提到的HTML敏捷包是一个很好的方法,但它可能感觉像用大锤敲开坚果。

但是,如果您对将被解析的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;
                }
            }

看看HTML敏捷包:

它是一个。net代码库,允许你解析"来自web"的HTML文件。解析器对"真实世界"的格式错误HTML非常宽容。对象模型与提出System.Xml的模型非常相似,但针对的是HTML文档(或流)。

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