HTML-Analyse mit c #

c# html html-agility-pack replace string

Frage

Ich arbeite an einer asp.net-Website. Ich muss eine bestimmte Zeichenfolge im HTML-Code mit c # ersetzen. Folgendes ist die HTML. Hier muss ich "@name" durch einen gültigen Namen mit c # -Code ersetzen. Ich habe versucht mit Java-Skript. Es funktioniert. Wie kann ich dies mit c # erreichen?

Wie kann ich den HTML-Code der aktuellen Seite mit c # oder HtmlAgilityPack abrufen, um ihn zu parsen?

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>

Akzeptierte Antwort

Angenommen, dies ist MVC, werfen Sie einen Blick auf mein CsQuery- Projekt. CsQuery ist eine jQuery-Port- und CSS-Selektor-Engine, mit der Sie direkt mit dem HTML-Code arbeiten können. Aber noch wichtiger ist, dass das Projekt ein Beispiel mit Code enthält, um auf den HTML-Code für eine Seite zuzugreifen, bevor sie in C # unter MVC gerendert wird.

Der Zugriff auf Teilansichten ist ziemlich einfach, siehe Rick Strahls Blogbeitrag zu diesem Thema.

Wenn Sie auf den gesamten HTML- ViewEngine einer Seite zugreifen und diesen möglicherweise ändern möchten, bevor Sie ihn gerendert haben, müssen Sie jedoch eine benutzerdefinierte ViewEngine erstellen und Callbacks für den Controller ViewEngine , mit denen Sie auf den HTML- ViewEngine zugreifen können. Es ist ziemlich viel damit beschäftigt, dies richtig zu machen. Anstatt Hunderte von Codezeilen zu kopieren, werfen Sie einen Blick auf die in CsQueryView enthaltene MVC-Beispielanwendung, insbesondere auf die Klassen im CsQueryView Ordner:

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

Dies umfasst eine benutzerdefinierte Ansichts-Engine und eine benutzerdefinierte Controller-Basisklasse, mit der Sie Methoden wie folgt zu Controllern hinzufügen können:

// 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;");
}

Diese Methoden werden nach den entsprechenden regulären Aktionsmethoden aufgerufen und legen den Wert von Doc . Doc ist ein CQ Objekt (das Core-Objekt in CsQuery). Dies enthält den gesamten HTML-Code für eine Seite. Es ist wie ein jQuery-Objekt. In Ihrer Situation könnten Sie einfach jQuery-Methoden verwenden wie:

// 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);

Um Ihre MVC-Anwendung so zu konfigurieren, dass sie diese Ansichts-Engine verwendet, müssen Sie diesen Code Application_Start hinzufügen:

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

Wenn Sie jedoch CsQuery nicht verwenden möchten, sollten Sie in diesem Beispiel erfahren, wie Sie vor dem Rendern auf die HTML-Ausgabe in MVC zugreifen können. Es verwendet Reflektion, um die Methoden zum Zurückrufen in Ihrem Controller herauszufinden, und es könnte leicht angepasst werden, um eine Zeichenfolge des HTML anstelle eines CsQuery-Objekts bereitzustellen.


Beliebte Antwort

Der einfachste Weg ist die String.Replace(String, String) -Methode:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum