我正在使用asp.net mvc4 C#进行项目。我想改变一些html元素
属性由c#表示宽度,高度等。我有一个简单的(_Layout.cshtml)文件。
<html>
<head>
<link href="@Url.Content("file.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("html.css")" rel="stylesheet" type="text/css" />
<body>
</body>
</head>
</html>
所以我使用html agility pack加载并保存这个文件
HtmlDocument doc= new HtmlDocument();
doc.load("_Layout.cshtml");
List<string> linklist = new List<string>();
scriptlist.Add("html.css");
scriptlist.Add("Html1.css");
HtmlNodeCollection _node = doc.DocumentNode.SelectNodes("//link");
foreach (HtmlNode Node in _node)
{
foreach (var sName in linklist)
{
if (Node.OuterHtml.Contains(Name.ToLower()))
{
Console.WriteLine(Node.OuterHtml);
var linkNode = HtmlNode.CreateNode("<link href=" + "@Url.Content(" + '"' + "~/links/../" + Name + '"' + ")" + "/>");
HeadNode.ReplaceChild(linkNode, Node);
}
}
}
doc.save("_Layout.cshtml");
保存文件输出后就像这样
<html>
<head>
<link href="@Url.Content("file.css")"="" rel="stylesheet" type="text/css" />
<link href="@Url.Content("html.css")" />
<body>
</body>
</head>
</html>
在(link href)中保存一些额外的字符,例如=“
我怎样才能避免这个问题..对于asp.net mvc,c#中是否有解析html的其他解决方案。
其实我想替换新路径来给出href属性
答案 0 :(得分:1)
您的标记作为Razor模板有效,但不是HTML,HtmlAgilityPack无法识别特定于剃刀的语法。具体来说,在HTML视点中,.cshtml中href
属性值中的双引号字符与用作属性值分隔符的外部双引号冲突。这个无效的HTML会导致HtmlAgilityPack出现意外行为。
作为一种变通方法,您可以在Razor模板中使用单引号作为属性值分隔符,以避免上述冲突:
<html>
<head>
<link href='@Url.Content("file.css")' rel="stylesheet" type="text/css" />
<link href='@Url.Content("html.css")' rel="stylesheet" type="text/css" />
<body>
</body>
</head>
</html>