c# - 从文本文件中读取行并自动分配变量
问题描述
我正在使用 .txt 从 TXT HTML 文件生成 PDF itextsharp
。我正在逐行读取文件。此行显示无效路径:
"<td style='width: 393px;' colspan='4' rowspan='1'> <img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' /> </td>"
但这显示了正确的图像:
sb.Append("<td style='width: 393px;' colspan='4' rowspan='1'> <img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' /> </td>");
我如何阅读该行并根据要求分配图像?
解决方案
Server.MapPath("~/images/diblack.png")
是 C# 代码。对于需要 HTML 的库,没有理由在该 HTML 代码中评估 C#。并且属性中的部分不是有效路径,因为它实际上是.src
" + Server.MapPath("~/images/diblack.png") + "
另一方面,当你写这行
"<td style='width: 393px;' colspan='4' rowspan='1'> <img src='" + Server.MapPath("~/images/diblack.png") + "' alt='System' width='100' height='50' /> </td>"
在代码中它自然地被解释为 C# 并且Server.MapPath(...)
被正确评估。
编辑
可以使用 动态编译和评估 C# 代码CSharpCodeProvider
(例如,请参见此处或此处)。这并不难实现,但仍然有点工作。如果您有预算,您可以购买一个库来简化代码以从字符串编译和评估 C# 代码(例如,请参见此处- 我不隶属于供应商)。
编辑2:
虽然第一次编辑中介绍的方法可以工作,但在 HTML 代码中添加某种占位符肯定更容易,例如
<td style='width: 393px;' colspan='4' rowspan='1'> <img src='!SERVER_PATH[~/images/diblack.png]' alt='System' width='100' height='50' /> </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));
}
推荐阅读
- javascript - Nock:nock.load 没有按预期工作
- python - IBM Cloud Python SDK:如何检索异常错误消息?
- python - Python os.remove(...) 字符串操作
- react-native - 使用 FlatList 显示自定义卡片元素并需要使其可触摸
- laravel - 如何更改 Laravel 控制器中的环境配置?
- date - TypeORM 未将“日期”转换为 utc
- javascript - 角度迁移 1.6 到 12
- python - 当 dtype 为 object 时,numpy.array_equal 和 numpy.testing.assert_array_equal 不会将 NaN 比较为相等
- python - 使用 Bearer Auth 使用 aiohttp 和 ApiKey 访问 TheHive 服务器时出现问题
- python - Microsoft Edge 自动填充加密