我有几十个HTML表单,我需要转换为ASP.NET MVC Razor部分视图(CSHTML)。具体来说,我需要将每个转换为@ Html.TextBox。例如,转换
<input name="text1" style="margin:0pt"></input>
到
@Html.TextBox("text1", String.Empty, new { style = "margin:0pt" })
然后将文件保存到新的CSHTML文件。当然,输入标签可以编码为
<input .../> or as <input ...></input>
并且标签可能有也可能没有样式属性。
任何人都知道我能做到这一点的自动化方式吗?另一种方法是手动进行更改,这将非常耗时。我在想一些正则表达式魔术将是要走的路,或者可能使用某种HTML DOM解析器,但我不是一个正则表达式的神,我不熟悉任何有用的解析组件。
任何建议都会非常感激!
答案 0 :(得分:0)
这会对你有帮助,
private static void ReplaceInputTagsWithHtmlTextBox(string filePath)
{
var input = System.IO.File.ReadAllText(filePath);
var keyValueRegex = new Regex("\\s*(?<key>[^=]*)=\\s*['\"](?<value>[^'\"]*)['\"]");
var values = new List<string>();
var regex = new Regex(@"<input (?<Attributes>[^>]*)>(</input>)?");
var newContent = regex.Replace(input, m =>
{
var keyValueDict = new Dictionary<string, string>();
var allAttributes = m.Groups["Attributes"].Value;
keyValueRegex.Replace(m.Groups["Attributes"].Value, mm =>
{
keyValueDict.Add(mm.Groups["key"].Value, mm.Groups["value"].Value);
return null;
});
var keyValues = new StringBuilder();
foreach (KeyValuePair<string, string> pair in keyValueDict)
{
if (!pair.Key.Equals("id", StringComparison.OrdinalIgnoreCase) && !pair.Key.Equals("name", StringComparison.OrdinalIgnoreCase) && !pair.Key.Equals("value", StringComparison.OrdinalIgnoreCase))//don't include id, name and value
keyValues.Append(pair.Key.Replace("class", "@class") + "= \"" + pair.Value + "\", ");
}
var keyValuesString = keyValues.ToString();
if (keyValuesString.EndsWith(", "))
keyValuesString = keyValuesString.Remove(keyValuesString.Length - 2, 2);
if (!keyValueDict.ContainsKey("name") || keyValueDict["name"] == null)
keyValueDict["name"] = "";
if (!keyValueDict.ContainsKey("value") || keyValueDict["value"] == null)
keyValueDict["value"] = "";
return String.Format("@Html.TextBox(\"{0}\", \"{1}\", new {{ {2} }})\n", keyValueDict["name"], keyValueDict["value"], keyValuesString);
});
using (StreamWriter outfile =new StreamWriter(filePath))
{
outfile.Write(newContent);
}
}
现在jus用它来调用,
ReplaceInputTagsWithHtmlTextBox("Temp.cshtml");