Puis-je utiliser une expression rationnelle dans une expression XPath?
Question
Quelque chose comme .// div [@ id = 'foo \ d +]
pour capturer les balises div avec id =' foo123 '
.
J'utilise .NET, si cela compte.
La solution
Comme d'autres réponses l'ont noté, XPath 1.0 ne prend pas en charge les expressions régulières .
Vous disposez néanmoins des options suivantes :
- Utilisez une expression XPath 1.0 (notez le < strong>
commence avec ()
ettraduire ()
) comme ceci:
.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
-
Utilisez EXSLT.NET : il existe un moyen de utiliser ses fonctions directement dans les expressions XPath sans avoir à utiliser XSLT . Les fonctions d'extension EXSLT permettant d'utiliser RegEx-es sont les suivantes:
regexp : match ()
, < code> regexp: replace () et < strong>expression rationnelle: test ()
-
Utiliser XPath 2.0 / XSLT 2.0 et son prise en charge intégrée des expressions régulières (les fonctions matches () , replace () et tokenize () )
Autres conseils
XPath 2.0 possède certaines fonctions qui prennent en charge les expressions régulières: matches ()
, replace ()
, tokenize ()
.
Dans XPath 1.0, il n’existe pas de support regex.
Pour .NET, vous pouvez utiliser le moteur XPath de Saxon.Net pour prendre en charge XPath 2.0.
Ainsi, si vous utilisez le moteur XPath 2.0 dans Saxon.NET, votre exemple deviendrait: .// div [correspond (@ id, 'foo \ d +')]
.
Sous .NET, vous avez la possibilité d’accéder à vos classes personnalisées (et donc aux regex si vous pouvez les coder correctement pour vos besoins) via des objets Extension.
Didacticiel ici .
Je voulais aussi faire cela, j'ai donc créé mon propre module xpath .