【问题标题】:Editing HTML and replacing certain texts inside it using c#使用 c# 编辑 HTML 并替换其中的某些文本
【发布时间】: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、教程链接等...都将得到应用!

【问题讨论】:

    标签: c# html string templates replace


    【解决方案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/

      【讨论】:

        猜你喜欢
        • 2017-01-09
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        相关资源
        最近更新 更多