Analyse HTML à l'aide de c #

c# html html-agility-pack replace string

Question

Je travaille sur un site Web asp.net.J'ai besoin de remplacer une chaîne particulière dans le code HTML à l'aide de c #. Voici le code HTML. Ici, je dois remplacer "@name" par un nom valide en utilisant le code c #. J'ai essayé d'utiliser un script java. Cela fonctionne. Comment puis-je atteindre cet objectif en utilisant c #?

Comment puis-je obtenir le code HTML de la page en cours en utilisant C # ou HtmlAgilityPack afin de l'analyser?

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>

Réponse acceptée

En supposant qu'il s'agisse de MVC, jetez un coup d'œil à mon projet CsQuery . CsQuery est un moteur de sélecteur CSS et de port jQuery, que vous pouvez utiliser pour utiliser directement le code HTML. Mais plus important encore, le projet inclut un exemple avec du code permettant d’accéder au code HTML d’une page avant son affichage en C # sous MVC.

Accéder aux vues partielles est assez facile, voir le blog de Rick Strahl sur le sujet.

Si vous souhaitez accéder au code HTML complet d'une page et éventuellement le modifier avant son rendu, vous devez toutefois créer un ViewEngine personnalisé et effectuer des rappels au contrôleur permettant d'accéder au code HTML. Il y a un peu impliqué dans faire ce droit. Plutôt que de copier des centaines de lignes de code, jetez un coup d'œil à l'exemple d'application MVC inclus avec CsQuery, en particulier aux classes du dossier CsQueryView :

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

Cela inclut un moteur de vue personnalisé et une classe de base de contrôleur personnalisée qui vous permet d'ajouter des méthodes aux contrôleurs comme ceci:

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

Ces méthodes sont appelées après les méthodes d'action standard correspondantes et définissent la valeur de Doc . Doc est un objet CQ (l'objet principal de CsQuery). Cela contient tout le code HTML d'une page. C'est comme un objet jQuery. Dans votre cas, vous pouvez simplement utiliser des méthodes jQuery telles que:

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

Pour que votre application MVC utilise ce moteur de visualisation, vous devez ajouter ce code à Application_Start :

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

Si vous ne souhaitez pas utiliser CsQuery, l'exemple doit vous montrer comment accéder à la sortie HTML dans MVC avant le rendu. Il utilise la réflexion pour déterminer les méthodes de rappel dans votre contrôleur et il pourrait facilement être adapté pour fournir une chaîne de code HTML au lieu d'un objet CsQuery.


Réponse populaire

Le moyen le plus simple consiste à utiliser la String.Replace(String, String) :

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow