Le codage des Expressions XPath avec les deux guillemets simples et doubles
XPath (v1) ne contient aucune façon d'encoder les expressions.
Si vous n'avez guillemets simples OU doubles ensuite, vous pouvez utiliser des expressions telles que
//review[@name="Bob's Pizza"]
//review[@name='"Pizza" Pam']
Mais si vous avez les DEUX e.g [Fred "envie d'une Pizza"] ensuite, vous devez utiliser quelque chose comme cela L'échappement de Chaînes dans XPath (C++) pour générer
//review[@name=Concat("Fred's ",'"Fancy Pizza"')]
Quelqu'un a une fonction en c# pour ce faire?
Quelques liens qui sont proches
- L'utilisation de la MVP.XML bibliothèque et XPathVariable (une très bonne solution, mais un peu lourd pour mes besoins).
- Ne pas coder où les deux " et " sont présents
- Ajoute plus d'arguments à la méthode Concat opération que nécessaire
par exemple, serait de retour
//la revue[@nom=concat('Fred', "'", 's ', '"', 'Fantaisie Pizza', '"', ")]
EDIT: quelques réponses ont suggéré d'échappement avec '
et " avec "
mais même si cela a un sens, il ne fonctionne pas, essayez en utilisant le fragment XML:
<review name="Bob's Pizza"/>
et le xpath
//review[@name='Bob's Pizza']
- utilisé il y a longtemps, et n'a pas donner des accessoires alors, mais je l'ai fait tout à l'heure!
Vous devez vous connecter pour publier un commentaire.
Wow, vous avez tous certainement de faire de ce complexe. Pourquoi ne pas le faire?
.NET Violon & test
Bien qu'il ne sera certainement pas de travail en toutes circonstances, voici une façon de contourner le problème:
doc.getDocumentElement().setAttribute("searchAttribute", name); String type = xpath.evaluate("//review[@name=//@searchAttribute]/@type", doc);
var n1 = xmlDoc.SelectNodes("//*/*/Credential[@Name='zzz']"); //returns 1 node
xmlDoc.DocumentElement.SetAttribute("searchName", "zzz");
var n2 = xmlDoc.SelectNodes("//*/*/Credential[@Name=/@searchName]"); // returns 0 nodes
/@foo
est faux: pour obtenir un attribut dans l'élément de niveau supérieur, vous devez faire/*/@foo
. Ainsi, le prédicat serait[@Name=/*/@searchName]
.J'étais dans le besoin de cela j'ai donc créé cette solution, pour C#.
C'est ce que je suis venu avec
Appelée à l'aide de quelque chose comme
Ainsi nous obtenons les résultats suivants
C'est seulement à l'aide de concat lorsque c'est nécessaire (à la fois " et " en chaîne)
Le dernier résultat montrer la méthode concat opération n'est pas aussi court qu'il pourrait l'être (voir la question), mais son assez proche et rien de plus optimale serait très complexe que vous devez regarder pour les paires de "ou".
sb.Append(")");
devrait être écrit commesb.AppendFormat(",\"{0}\")", input.Substring(lastPos));
. Sinon, bon travail, merci pour un exemple de travail!var node = xd.XPathSelectElements("/Math/Show[Quiz = " + EncaseXpathString("'This 'wont hurt'"+ "]"));
var node = xd.XPathSelectElements("/Math/Show[Quiz = " + EncaseXpathString("This 'wont hurt"+ "]"));
J'ai eu des problèmes avec toutes les solutions jusqu'à présent. On a des sections de texte (par exemple, '"' ou "'") qui rompt ce que vous cherchez. On laisse tomber tout le texte après la dernière citation/dblquote qui divise aussi bien.
C'est un idiot et rapide de la solution à partir d'un muet vb développeur:
D'utilisation (de même que pour les exemples précédents):
J'avais besoin de le faire dans XSLT soi, donc il est venu avec le suivant, basé sur les réponses sur cette page:
Une autre variante...mon concat() est un peu paresseux, mais au moins, il utilise l'ensemble de la valeur.
Rejoindre dans le plaisir
URL: http://vaibhavgaikwad.wordpress.com/2007/10/04/handling-apostrophe-single-quote-in-xpath-expressions-in-net/
citation:
Et voici comment modifier le code pour utiliser notre nouvelle fonction:
//n'oubliez pas d'enlever les guillemets simples après = et ]
Ou tout simplement faire comme le post précédent suggéré. faire une facile func remplacer le " et " & apos ; et & quot ;