Requête XPath retourne toujours NULL uniquement sur certaines requêtes dans SingleNodeSelect

StackOverflow https://stackoverflow.com/questions/3273432

Question

<?xml version="1.0" encoding="utf-16"?>
<users>
  <user number="0772247157">
    <step stepnumber="1">complete</step>
    <step stepnumber="2">complete</step>
    <step stepnumber="3">complete</step>
  </user>
  <user number="0772247158">
    <step stepnumber="1">complete</step>
    <step stepnumber="2">complete</step>
  </user>
  <user number="0772247159">
    <step stepnumber="1">complete</step>
  </user> 
</users>

Des requêtes telles que

//user[@number='0772243950'] et //user[@number=0772243950]/step[last()] fonctionne sans aucun problème qui utilise SelectSingleNode méthode.

Cependant, la fonction suivante renvoie TOUJOURS null.Il fonctionne parfaitement avec XPath Visualizer et j'ai vérifié avec un en ligne XPath évaluateur.

public bool checkStepExists(string Number, string StepNumber)
{
    string XPathQuery = "//user[@number=" + Number + "]/step[@stepnumber=" + StepNumber + "]";

    XmlNode Search = SettingsFile.SelectSingleNode(XPathQuery);      

    if (Search == null)
       return false;
    else
       return true;            
}

J'ai cherché sur DONC, avant de poser cette question et de tous les points de l'espace de noms des problèmes.Mais ce que je ne peux pas comprendre, c'est que c'est un fichier XML local qui ne dispose pas d'un espace de noms.OU, devrais-je TOUJOURS avoir un espace de noms et un préfixe et l'utiliser?

Était-ce utile?

La solution

Au sein de votre chaîne XPathQuery Je pense que vous avez besoin de citer les chiffres.Comme ceci:

string XPathQuery = "//user[@number=\"" + Number + "\"]/step[@stepnumber=\"" + StepNumber + "\"]";

Autres conseils

Peut-être essayer avec les guillemets supplémentaires?

string XPathQuery = "//user[@number='" + Number + "']/step[@stepnumber='"
          + StepNumber + "']";

Je serais également intéressé à vérifier si il y a n'importe quel espace autour de l'ajout de Number ou StepNumber.En gros:qu'est-ce que l' réel chaîne de requête que vous transmettez?(après concaténation etc).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top