Je reçois des données html du serveur distant et avant de les afficher dans l'interface utilisateur, j'ai besoin de faire quelques modifications, par exemple supprimer des compteurs, remplacer des liens, etc. Changement de lien spécifique n'est pas un gros problème, mais quand il s'agit d'un traitement avancé, j'ai quelques problèmes.Il est nécessaire de remplacer (supprimer) quelques attributs tag html (pas un tag lui-même - il y a beaucoup d'exemples sur internet ce). Par exemple: supprimez tous les gestionnaires onmouseover des boutons. Je sais que XPath serait un ajustement parfait pour un tel problème, mais je ne le connais pas du tout et bien que mon information soit XHTML-plainte, il est stocké dans une variable de chaîne et non interrogeable :(. Donc j'essaie d'utiliser les expressions régulières pour résoudre ce problème, sans succès pour l'instant. Je suppose que c'est une erreur dans le modèle ...C# - Traitement des attributs de balises html
public string Processing (string Source, string Tag, string Attribute)
{
return System.Text.RegularExpressions.Regex.Replace(Source, string.Format(@"<{0}(\s+({1}=""([^""]*)""|\w+=(""[^""]*""|\S+)))+>", Tag, Attribute), string.Empty);
}
...
string before = @"<input type=""text"" name=""Input"" id=""Input"" onMouseOver=""some js to be eliminated"">";
string after = Processing(before,"input","onMouseOver");
// expected : <input type="text" name="Input" id="Input">"
Il semble que la parenthèse de fermeture du groupe soit manquante (regex ne compile pas). Expression fixe: @ "(<{0}\b[^>] *? \ B) ({1} =" "(?: [^" "] *)" ")" – Jaded
Et, bien sûr, merci beaucoup, votre indice est en fait ce que J'ai eu besoin. – Jaded
Oups. En fait, le support rond d'ouverture juste avant le {1} ne devrait pas être là. Il est inutile de capturer l'attribut, puisque tout ce que vous faites est de le supprimer. –