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 :

[C#-XPATH]Mauvais caractère d'échappement ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Par défaut [C#-XPATH]Mauvais caractère d'échappement ?
    Bonjour à tous,

    J'ai un certain nombre de fichiers XML dans lesquels je stocke des données.
    Ces données sont des strings mais contiennent parfois le caractère 'apostrophe'. Lorsque je fais une requête via XPATH tout fonctionne correctement sauf lorsque la chaîne de caractère contient un apostrophe. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string NomDénomination = "Crémant-d'Alsace";
    string sXPathQuery = "//Terroir[Dénomination = '" + NomDénomination + "']";
    J'ai essayé de contourner le problème par une boucle comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach (char c in NomDénomination)
    {
         if (c.ToString() == "'") NomDénomination = NomDénomination + "\'";
         else NomDénomination = NomDénomination + c.ToString();
    }
    Mais j'ai toujours le message d'erreur m'indiquant que le jeton est non valide.
    Je présume qu'il s'agit d'un mauvais caractère d'échappement pour XML.
    Quelqu'un aurait-il la solution ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Par défaut
    Hello,

    XPath ne reconnaitra aucun caractère d'échappement il est donc normal que la boucle ne règle pas le soucis.

    Cependant il gère bien deux caractère différents pour délimiter les chaînes de caractères.
    Dans ton cas tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sXPathQuery = "//Terroir[Dénomination = \"" + NomDénomination + "\"]";
    Si ça marche tu ne pourras en revanche plus avoir de quote dans NomDénomination.

    Le plus propre serait de faire des requêtes paramétré comme on pourrait le faire avec du SQL.

    Amicalement,
    Mvk

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Par défaut
    Merci pour ta réponse. J'avais soumis le problème sur le forum XML et j'ai obtenu la solution grâce à la réponse qui était celle-ci:

    Si c'est bien du XPath 2.0, oui. Il suffit de doubler les ' qui doivent être échappés.
    Si c'est en réalité du XPath 1.0, non.

    Il n'y a que deux solutions :

    - changer de délimiteur

    Sélectionner tout - Visualiser dans une fenêtre à part:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "//Terroir[Dénomination = \"" + NomDénomination + "\"]";
    - pour des trucs genre Crémant-d'Alsace "amélioré" (qui contiennent à la fois des apostrophes et des guillemets,) concaténation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string NomDénomination = "concat(\"Crément-d'Alsace \", '\"amélioré\"')";
    string sXPathQuery = "//Terroir[Dénomination = NomDénomination ]";
    Voilà, je le poste sur ce forum parce que ça pourrait servir à d'autres.

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

Discussions similaires

  1. caractère d'échappement pour un '
    Par alexfrere dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 04/07/2006, 11h07
  2. caractère d'échappement de '['
    Par Ecibat dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 19/12/2005, 14h27
  3. Caractères d'échappement
    Par dl_jarod dans le forum ASP
    Réponses: 2
    Dernier message: 26/10/2005, 10h36
  4. caractéres d'échappements
    Par kleenex dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 12h46

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