使用c#進行HTML解析

c# html html-agility-pack replace string

我正在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>

一般承認的答案

假設這是MVC,看看我的CsQuery項目。 CsQuery是一個jQuery端口和CSS選擇器引擎,您可以使用它直接使用HTML。但更重要的是,該項目包含一個示例,其中包含在MVC下使用C#呈現之前訪問頁面的HTML的示例。

訪問部分視圖非常簡單,請參閱Rick Strahl關於此主題的博客文章

但是,如果要訪問頁面的整個HTML並可能在呈現之前對其進行更改,則需要創建自定義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;");
}

這些方法對應的常規操作方法之後調用,並設置Doc的值。 Doc是一個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對象。


熱門答案

最簡單的方法是使用String.Replace(String, String)方法:

string newString = html.Replace("@name", "valid name");



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因