2014-07-14 2 views
1

Je travaille actuellement sur un projet Java utilisant XPath et comme je ne suis pas un expert XPath, je dois trouver un moyen de valider la syntaxe des expressions XPath aléatoires, sans les associer aux données XML.Validation de syntaxe d'expression XPath

J'ai trouvé beaucoup de valideurs XPath sur le web et malheureusement tous nécessitent des données XML.

Mon besoin immédiat est de valider l'expression suivante:

/cXML/Request/OrderRequest/OrderRequestHeader/Extrinsic/@name[NameOrder]/Name 

Je vous remercie de commentaires sur la validité de celui-ci spécifique ...

Répondre

2

Je suppose que vous voulez valider la syntaxe, mais pas si l'expression est valide dans le contexte d'un schéma XML ou XML. Vous pouvez utiliser la méthode compile(..) et il lèvera une exception si le xpath est incorrect avec la syntaxe.

XPathFactory factory = XPathFactory.newInstance(); 
XPath xpath = factory.newXPath(); 
XPathExpression expr = xpath.compile("//book[author='Abc']/title/text()"); 
+0

Merci, c'est bon à savoir. Donc ma quête se termine ici: c'est le validateur que je cherchais, qui me dira si la syntaxe est correcte, mais qui malheureusement ne me dira jamais si l'expression a du sens, comme l'a souligné Michael ... –

3

« Puisque vous n'êtes pas un expert XPath », la plupart des erreurs que vous faites dans vos expressions XPath ne sera probablement pas des erreurs de syntaxe, mais des erreurs sémantiques. Malheureusement, la plupart des erreurs dans les expressions XPath ne sont pas détectées comme des erreurs de syntaxe ou même des erreurs d'exécution, mais donnent simplement de mauvaises réponses. (XPath est assez similaire aux expressions régulières à cet égard.)

Votre exemple est un exemple typique. C'est syntaxiquement valide, mais ne sélectionnera jamais rien. En effet, il inclut l'étape @name[NameOrder], qui sélectionne tous les attributs "name" ayant un élément enfant NameOrder. Les attributs n'ont jamais d'enfants, donc rien ne va satisfaire cette expression. Saxon vous donnera un avertissement, mais ce n'est pas une erreur de syntaxe. Donc, je ne pense pas que votre approche de la validation syntaxique va vous aider beaucoup.

+0

Merci Michael, c'est plutôt surprenant: le fait que le standard XPath permette aux expressions XPath de ne jamais sélectionner de données. À cet égard, à coup sûr ma quête n'a pas beaucoup de but ... –

Questions connexes