IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[2.0] XML et caratères d'échappement


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2002
    Messages : 54
    Par défaut [2.0] XML et caratères d'échappement
    Environnement : C# 2.0 + XML
    Contexte : lecture dans un fichier de configuration XML d'une chaîne qui représente le nom d'un utilisateur d'un domaine au format "<nom de domaine>\<nom de l'utilisateur>"
    Problème : quand je lis la valeur stockée dans le fichier XML pour la stocker dans un variable String, le caratère "\" est doublé (sans doute pour ne pas être interprété comme un caratère d'échappement). J'ai essayé la syntaxe verbatim (@), mais ce n'est utile qu'avec les chaînes "en dur".
    Question : comment faire pour que le caratère "\" ne soit pas doublé sans changer le fichier XML ?

  2. #2
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Il suffit de supprimer le deuxieme caratère "\"
    Maintenant serieusement je crois que tu te trompes un peu pour le double "\". Pour avoir un double "\" dans un string en effet tu dois avoir quatre "\" ("\\\\"). Voila un bout de code qui va clarifier ce point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                string normal = "\\A";
                string verbatim = @"\\A";
                Console.WriteLine(normal.Length);//Affiche 2 - un "\" et un "A"
                Console.WriteLine(verbatim.Length);//Affiche 3 - deux "\" et un "A"
    et pour le fichier XML a ta place je ferai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                string fName = @"C:\web.xml";
                string domain = string.Empty;
                string username = string.Empty;
                using (FileStream fs = File.Open(fName, FileMode.Open))
                {
                    XPathDocument doc = new XPathDocument(fs);
                    XPathNavigator nav = doc.CreateNavigator();
                    XPathNavigator tab = nav.SelectSingleNode("/tag");
     
                    char bs = '\\';
                    int idx = tab.Value.IndexOf(bs);
                    domain = tab.Value.Substring(0, idx);
                    username = tab.Value.Substring(idx, tab.Value.Length - idx).Replace(bs.ToString(), "");
                }
    Web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="windows-1250"?>
    <tag>google.com\scifire</tag>
    J'espere que cela va t'aider
    A+

  3. #3
    Membre actif
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2002
    Messages : 54
    Par défaut
    Merci pout ta réponse, Scifire.

    Je ne pense pas me tromper : si le "\" du ficher XML ne de venait pas "\\" dans la variable, je n'aurai pas eu de problème et n'aurai rien posté.

    Ton premier test en reste aux variables avec des valeurs en dur : la syntaxe verbatim est alors efficace. Mais je ne suis pas dans ce contexte.

    J'ai bien pensé au "replace", mais je voulais savoir s'il existait une manière élégante d'arriver à ce même résultat, puisque ce problème doit être récurent.

    Merci tout de même.

  4. #4
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Citation Envoyé par Yann
    si le "\" du ficher XML ne de venait pas "\\" dans la variable ...
    Bah si tu te trompes
    C'est tout a fait normal que le "\" devient "\\" dans la variable
    Si tu as developpez.com\toto(longeur 19) dans le fichier, ta variable sera egale a "developpez.com\\toto"(TOUJOURS la longeur est 19 !)
    Si tu as eu "developpez.com\toto" comme valeur de la variable, comme c'est dans le fichier XML, en realite tu as un string de longeur 18 - le mot "developpez.com", une tabulation("\t") et le mot "oto" !
    Je te propose de lancer ce petit test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                Console.WriteLine("Single quote: \'");
                Console.WriteLine("Quotation mark: \"");
                Console.WriteLine("Backslash: \\");
                Console.WriteLine("Alert: \a ");
                Console.WriteLine("Formfeed: \f");
                Console.WriteLine("Newline: \n");
                Console.WriteLine("Carriage Return: \r");
                Console.WriteLine("Tabulator: before\tafter");
                Console.WriteLine("Backslash: \");  // une erreur de compilation
    String Literals
    Si tu veux se passe de l'appel a la methode Replace il suffit de changer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    username = tab.Value.Substring(idx, tab.Value.Length - idx).Replace(bs.ToString(), "");
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    username = tab.Value.Substring(++idx, tab.Value.Length - idx);

  5. #5
    Membre actif
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2002
    Messages : 54
    Par défaut
    Tu as tout à fait raison : autant pour moi
    Merci pour tes réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de caractère d'échappement en XML
    Par alexxxx69 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 01/11/2011, 14h45
  2. [MySQL] générer un fichier xml avec des caratéres speciaux via php
    Par sooprano dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 18/12/2010, 15h11
  3. delphi XML / HTML caractéres speciaux !
    Par adem dans le forum EDI
    Réponses: 2
    Dernier message: 29/08/2002, 17h48
  4. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 12h07
  5. Pas de casse dans les XML
    Par :GREG: dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo