使用 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> [TestMode]</span>
<br /><br />
<span class="headerComment"><b>Referenced DUT:</b> [RefDUT]</span>
<br /><br />
<span class="headerComment"><b>Voltage Failure Limit:</b> [VoltageLimit]</span>
<br /><br />
<span class="headerComment"><b>Current Failure Limit:</b> [CurrentLimit]</span>
<br /><br />
<span class="headerComment"><b>Test Mode:</b>[TestMode] </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> [TestMode]</span><br /><br /><span class=\"headerComment\"><b>Referenced DUT:</b> [RefDUT]</span><br/><br/><span class=\"headerComment\"><b>Voltage Failure Limit:</b> [VoltageLimit]</span><br /><br /><span class=\"headerComment\"><b>Current Failure Limit:</b> [CurrentLimit]</span><br /><br /><span class=\"headerComment\"><b>Test Mode:</b>[TestMode] </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 并替换其中的某些文本的主要内容,如果未能解决你的问题,请参考以下文章
查找并替换所有以 # 开头的单词,并将标签文本包装在 HTML 中