Requête XPath retourne toujours NULL uniquement sur certaines requêtes dans SingleNodeSelect
-
17-09-2020 - |
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?
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).