Html Agility Pack在c#中保存html文件时创建不相关的字符

时间:2012-12-06 19:12:48

标签: c# asp.net-mvc-3 razor html-parsing html-agility-pack

我正在使用asp.net mvc3 C#开发项目。我想改变一些html元素

属性由c#表示宽度,高度等。我有一个简单的(_ Layout.cshtml)文件

    <html> <head>
    <link href="@Url.Content("file.css")" rel="stylesheet" type="text/css" />
    <body>

     <a href="#" id="link1" title="@Function.ConfigElement("FacebookLink")" ></a>

     </body>
    </head> </html>

所以我使用html agility pack加载并保存这个文件

HtmlDocument doc= new HtmlDocument();

doc.load("_Layout.cshtml");

doc.GetElementbyId("link1").Attributes.Add("title", "@Function.ConfigElement("NewLink")");

doc.save("_Layout.cshtml");

保存文件输出后就像这样

<html> <head>
        <link href="@Url.Content("file.css")"="" rel="stylesheet" type="text/css" />
        <body>

         <a href="#" id="link1" title="@Function.ConfigElement("NewLink")"="" ></a>

         </body>
        </head> </html>

(link href)(anchor title)中保存了一些额外的字符

我怎样才能避免这个问题.. 对于asp.net mvc,在c#中解析html是否还有其他解决方案。

实际上我想在这些html元素属性

中添加一些服务器端功能

2 个答案:

答案 0 :(得分:3)

当StackOverflow的语法高亮显示提示时,您的HTML非常无效。

href="@Url.Content("file.css")"

这实际上有两个属性:href="@Url.Content("file.css")"。 (没有价值)

您不能使用HTML解析器来解析Razor标记 相反,您应该使用实际的Razor解析器。

答案 1 :(得分:1)

CSCHTML 不是 HTML。它是CS,特殊脚本和可选HTML的混合 - 所以HtmlAgilityPack不是一个阅读/操作它的好工具。

为什么会发生这种情况:

<link href="@Url.Content("file.css")" 

表单HTML的观点有2个属性和(href和file.css)加上奇怪的“)”意外文本。不知怎的,AgilityPack试图理解它并输出你得到的任何东西。