首页 > 解决方案 > 从文本文件中读取行并自动分配变量

问题描述

我正在使用 .txt 从 TXT HTML 文件生成 PDF itextsharp。我正在逐行读取文件。此行显示无效路径:

"<td style='width: 393px;' colspan='4' rowspan='1'>&nbsp;<img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>"

但这显示了正确的图像:

sb.Append("<td style='width: 393px;' colspan='4' rowspan='1'>&nbsp;<img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>");

我如何阅读该行并根据要求分配图像?

标签: c#asp.net

解决方案


Server.MapPath("~/images/diblack.png")

是 C# 代码。对于需要 HTML 的库,没有理由在该 HTML 代码中评估 C#。并且属性中的部分不是有效路径,因为它实际上是.src" + Server.MapPath("~/images/diblack.png") + "

另一方面,当你写这行

"<td style='width: 393px;' colspan='4' rowspan='1'>&nbsp;<img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>"

在代码中它自然地被解释为 C# 并且Server.MapPath(...)被正确评估。

编辑

可以使用 动态编译和评估 C# 代码CSharpCodeProvider(例如,请参见此处此处)。这并不难实现,但仍然有点工作。如果您有预算,您可以购买一个库来简化代码以从字符串编译和评估 C# 代码(例如,请参见此处- 我不隶属于供应商)。

编辑2:

虽然第一次编辑中介绍的方法可以工作,但在 HTML 代码中添加某种占位符肯定更容易,例如

<td style='width: 393px;' colspan='4' rowspan='1'>&nbsp;<img src='!SERVER_PATH[~/images/diblack.png]' alt='System' width='100' height='50' />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>

阅读该行后,您可以轻松地将占位符替换为正则表达式

var line = ReadLine();
var matches  = Regex.Matches(line, "!SERVER_PATH\\[([\\~a-z\\.\\/]+)\\]");
foreach(Match match in matches)
{
    line = line.Replace(match.Value, Server.MapPath(match.Groups[1].Value));
}

推荐阅读