我使用的是VSTS 2008 + C#+ .Net 2.0.当执行以下语句时,会从String.Format语句中抛出FormatException,任何想法有什么问题?
这是获取我正在使用的template.html的地方.我想在template.html中格式化此部分m = {0}.
string template = String.Empty; using (StreamReader textFile = new StreamReader("template.html")) { template = textFile.ReadToEnd(); String.Format(template, "video.wmv"); }
http://www.mediafire.com/download.php?u4myvhbmmzg
编辑1:
这是我的template.html的内容,
Silverlight Project Test Page
感谢avvance,乔治
猜测,html包含javascript或其他大括号({
和}
),它们都需要加倍({{
和}}
)才能使用string.Format
.我期望一个不同的(更明显的)令牌可能是有序的,即%%FILENAME%%
.然后使用正则表达式或string.Replace
.
如果你有一个标签,string.Replace
很好; 如果你有很多,有正则表达式的技巧,MatchEvaluator
这可能会有所帮助 - 就像这样,但具有不同的正则表达式模式.
添加示例html后更新:我肯定会使用不同的令牌; 在最基本的层面:
和
template = template.Replace("%%FILENAME%%", "video.wmv");
您的模板包含需要转义的字符{
和}
字符,否则会混淆String.Format
.使用{{
和逃脱它们}}
.或者,使用不同的机制,例如String.Replace
.
的String.format()不处理{
,并}
在格式字符串.您需要更换{
与{{
和}
与}}
无处不在的template.html
文件.除了使用{0}
占位符的单个位置.
不是很优雅.
相反,请考虑使用模板引擎.有关建议,请参见http://csharp-source.net/open-source/template-engines.
下一个最佳解决方案是使用正则表达式(使用MatchEvaluator)或string.Replace(),如其他答案所示.
编辑:
以下是使用StringTemplate模板引擎的示例:
StringTemplate htmlpage = new StringTemplate(File.ReadAllText("template.html")); htmlpage.SetAttribute("content", "video.wmv"); Console.WriteLine(htmlpage.ToString());
更改template.html
文件中的一行:
从:
至:
当模板引擎$content$
在模板中遇到时,它会将其替换为您使用代码设置的"content"属性的值.
使用StringTemplate,您可以在模板中执行简单的循环和条件.请参阅文档.