2

我正在一个asp.net网站上工作。我需要使用c#替换html中的特定字符串。以下是html。在这里,我需要使用 c# 代码将“@name”替换为有效名称。我尝试使用 java 脚本。它正在工作。我如何使用 c# 实现这一点?

如何使用 c# 或 HtmlAgilityPack 获取当前页面的 HTML 以解析它?

HTML:

<div>
In the @name, you may have configured an iPad in both the AppleDevices and the TabletDevices configuration. However, because AppleDevices may have been set for a small display size, you want an iPad to use the TableDevices configuration (which has a larger screen). Reorder the devices in the following order so that an iPad will use the TableDevices configuration first.
Tablet Devices
Apple Devices
</div>
4

5 回答 5

3
var result = html.Replace("@name", valid_name)
于 2012-07-12T12:39:35.060 回答
3

最简单的方法是使用String.Replace(String, String)方法:

string newString = html.Replace("@name", "valid name");
于 2012-07-12T12:40:12.370 回答
2

假设这是 MVC 看看我的CsQuery项目。CsQuery 是一个 jQuery 端口和 CSS 选择器引擎,您可以使用它直接处理 HTML。但更重要的是,该项目包含一个示例,其中包含在 MVC 下以 C# 呈现页面之前访问页面 HTML 的代码。

访问局部视图非常容易,请参阅 Rick Strahl 的有关该主题的博客文章

但是,如果您想访问页面的整个 HTML 并可能在呈现之前对其进行更改,则需要创建一个 custom ViewEngine,并对控制器进行回调,以便您可以访问 HTML。正确地做到这一点涉及很多。与其复制数百行代码,不如看一下 CsQuery 中包含的示例 MVC 应用程序,特别是CsQueryView文件夹中的类:

https://github.com/jamietre/CsQuery/tree/master/examples/CsQuery.MvcApp

这包括一个自定义视图引擎和一个自定义 Controller 基类,可让您向控制器添加方法,如下所示:

// runs for all actions
public void Cq_Start()
{
    Doc["a.not-allowed"]
        .Attr("onclick","javascript:alert('You're not authorized to click this')");
}

// runs for the Index action
public void Cq_Index()
    Doc["div"].Css("border", "1px solid red;");
}

这些方法在对应的常规操作方法之后调用,并设置 的值DocDoc是一个CQ对象(CsQuery 中的核心对象)。这包含页面的所有 HTML。它就像一个 jQuery 对象。在您的情况下,您可以使用 jQuery 方法,例如:

// select all divs on the page
var div = Doc["div"];

// do parameter substitution
var newText = div.Text().Replace("@name", valid_name);

// update the text
div.Text(newText);

要切换您的 MVC 应用程序以使用此视图引擎,您需要将此代码添加到Application_Start

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CsQueryViewEngine());

但是,如果不想使用 CsQuery,该示例应该向您展示如何在 MVC 中访问 HTML 输出,然后再呈现。它使用反射来找出在控制器中回调的方法,并且可以很容易地调整它以提供 HTML 字符串而不是 CsQuery 对象。

于 2012-07-12T14:38:03.127 回答
1
string htmlContent=@"<div>In the @name, you may have configured an iPad in both the AppleDevices and the TabletDevices configuration. However, because AppleDevices may have been set for a small display size, you want an iPad to use the TableDevices configuration (which has a larger screen). Reorder the devices in the following order so that an iPad will use the TableDevices configuration first.
Tablet Devices
Apple Devices
</div>";
string htmlNewContent=htmlContent.Replace("@name",valid_name);
于 2012-07-12T13:21:05.353 回答
0

如果只是这个替换,你可以使用 string.Replace();

您的代码看起来像一个 html teplate。如果您的变量列表会增加,我强烈建议您使用 Razor 作为模板引擎,您可以在其中获得静态类型、html 表中的智能感知和其他功能。

于 2012-07-12T12:45:02.703 回答