Analisi HTML utilizzando c #

c# html html-agility-pack replace string

Domanda

Sto lavorando su un sito Web asp.net. Ho bisogno di sostituire una stringa particolare nel codice HTML usando c #. Di seguito è riportato l'html. Qui ho bisogno di sostituire "@name" con un nome valido usando il codice c #. Ho provato a utilizzare java script. Funziona. Come posso ottenere questo utilizzando c #?

Come posso ottenere l'HTML della pagina corrente utilizzando c # o HtmlAgilityPack per analizzarlo?

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>

Risposta accettata

Supponendo che MVC dia un'occhiata al mio progetto CsQuery . CsQuery è una porta jQuery e un motore di selezione CSS, che puoi utilizzare per lavorare direttamente con l'HTML. Ma ancora più importante il progetto include un esempio con codice per accedere all'HTML per una pagina prima di renderizzare in C # sotto MVC.

L'accesso alle viste parziali è piuttosto facile, vedi il post sul blog di Rick Strahl sull'argomento.

Se si desidera accedere all'intero HTML di una pagina e potenzialmente alterarlo prima del rendering, tuttavia, è necessario creare un ViewEngine personalizzato e creare callback nel controller in cui sarà possibile accedere all'HTML. C'è parecchio da fare nel fare ciò giusto. Piuttosto che copiare centinaia di righe di codice, dai un'occhiata all'app MVC di esempio inclusa con CsQuery, in particolare le classi nella cartella CsQueryView :

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

Ciò include un motore di visualizzazione personalizzato e una classe di base Controller personalizzata che consente di aggiungere metodi a controller come questo:

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

Questi metodi sono chiamati dopo i normali metodi di azione che corrispondono e impostano il valore di Doc . Doc è un oggetto CQ (l'oggetto principale in CsQuery). Questo contiene tutto l'HTML per una pagina. È come un oggetto jQuery. Nella tua situazione potresti semplicemente usare i metodi jQuery come:

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

Per passare all'app MVC per utilizzare questo motore di visualizzazione è necessario aggiungere questo codice a Application_Start :

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

Se non si desidera utilizzare CsQuery, tuttavia, l'esempio dovrebbe mostrare come accedere all'output HTML in MVC prima del rendering. Usa la riflessione per capire i metodi da richiamare nel controller e potrebbe essere facilmente adattato per fornire una stringa di HTML invece di un oggetto CsQuery.


Risposta popolare

Il modo più semplice è utilizzare il metodo String.Replace(String, String) :

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché