从文本文件读取行并自动分配变量

时间:2018-10-08 09:46:34

标签: c# asp.net

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

"<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>");

如何读取行并按要求分配图像?

1 个答案:

答案 0 :(得分:2)

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(...)被正确评估。

编辑

可以使用CSharpCodeProvider即时编译和评估C#代码(例如,参见herehere)。这并不难实现,但是仍然有些工作。如果您有预算,可以购买一个可以简化代码的库,以便从字符串中编译和评估C#代码(例如,请参见here-我与供应商无关)。

编辑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));
}