C# REMPLACEMENT CARACTÈRES SPÉCIAUX FICHIER XML

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 29 mars 2009 à 16:06
zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012 - 8 août 2012 à 02:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49663-c-remplacement-caracteres-speciaux-fichier-xml

zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012
8 août 2012 à 02:01
bonjour a tout le monde, je cherche a développer un code en C# qui me permet d'utiliser les expressions régulières pour trouver des mots (par exemple ayant la forme PM-ASK-2134) dans un document Word, le code est facile pour des fichiers textes (.txt) mes pour un document Word c'est différent, SVP si qelqu'un a une idée je suis coinsé depuis 2 semaines. merci a l'avance.
voila mon code: (il permet de trouver la chaine "PM-ASK-2134" dans un document word mais je cherche a trouver toutes les ocurences de ce type en utilisant une expression régulière):

object missing = System.Reflection.Missing.Value;
object fileName = @textBox1.Text.ToString();
Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
msWord.Visible = false;
Microsoft.Office.Interop.Word.Document nvDoc;
nvDoc = msWord.Documents.Open(ref fileName, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing);

nvDoc.Application.Selection.Find.ClearFormatting();
Regex Tag = new Regex(@"SC-([\w\-.]+)-([\S\-.]+)");
nvDoc.Application.Selection.Find.Text = "PM-ASK-2134";

while (nvDoc.Application.Selection.Find.Execute(
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing))
{
MessageBox.Show(nvDoc.Application.Selection.Find.Text);
}
// else MessageBox.Show("Text not found.");

// Fermer le document
nvDoc.Close(ref missing, ref missing, ref missing);

// Fermeture de word
msWord.Quit(ref missing, ref missing, ref missing);
kiterie Messages postés 8 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 8 avril 2010
2 avril 2009 à 23:23
Je comprends pas: comment tu fais pour remplacer avec Replace sans utiliser une lecture par XMLDocument? comment tu sais quels caractères sont à remplacer ou non? car tu ne peux pas remplacer tous les caractères.... ceux qui sont dans des balises ne doivent pas être modifiés.
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 mars 2009 à 19:04
Les expressions régulieres n'ont rien a voir avec le XML.
Le document n'a pas besoin d'un document XML
kiterie Messages postés 8 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 8 avril 2010
31 mars 2009 à 07:45
Pour l'expression régulière ok ça peut gérer sans problème les quotes et doubles quotes si le fichier XML est ouvrable en tant que XmlDocument. Seulement elle ne peut pas gérer les balises ouvrantes ou fermantes supplémentaires, ou encore les & contenus entre deux balises.
Or ce genre de caractères empêche l'ouverture du fichier XML sous forme de XmlDocument.
PsyCaDi Messages postés 123 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 30 mars 2009
30 mars 2009 à 11:59
Ou alors, tu peux utiliser la méthode HttpUtility.HtmlEncode
http://msdn.microsoft.com/fr-fr/library/system.web.httputility.htmlencode.aspx
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
29 mars 2009 à 16:06
Salut,

Une expression reguliere de type Replace permet de repondre plus rapidement a ton probleme

Une gestion plus fine des exceptions est recommandée

soit par un bloc using
soit par un try catch finally (ce dernier fermant les flux et les fichiers)

Bon courage