Puis-je utiliser une expression régulière dans une expression XPath?

Quelque chose comme .//div[@id='foo\d+] pour capturer les balises div avec id='foo123' .

J’utilise .NET, si cela compte.

Comme d’autres réponses l’ont noté, XPath 1.0 ne prend pas en charge les expressions régulières .

Néanmoins, vous avez les options suivantes :

  • Utilisez une expression XPath 1.0 (notez les fonctions starts-with() et translate() ) comme ceci:
 .//div
    [commence par (@id, 'foo') 
   et 
    'foo' = translate (@id, '0123456789', '')
   et
    longueur de chaîne (@id)> 3   
    ]
  • Utilisez EXSLT.NET – il y a un moyen d’ utiliser ses fonctions directement dans les expressions XPath sans avoir à utiliser XSLT . Les fonctions d’extension EXSLT qui permettent d’utiliser RegEx-es sont: regexp:match() , regexp:replace() et regexp:test()

  • Utilisez XPath 2.0 / XSLT 2.0 et son support intégré pour les expressions régulières (les fonctions matches () , replace () et tokenize () )

XPath 2.0 a des fonctions qui supportent les expressions régulières: matches() , replace() , tokenize() .

Dans XPath 1.0, il n’y a pas de support regex.

Pour .NET, vous pouvez utiliser le moteur XPath de Saxon.Net pour prendre en charge XPath 2.0.

Donc, si vous utilisez le moteur XPath 2.0 dans Saxon.NET, votre exemple sera: .//div[matches(@id,'foo\d+')] .

Dans .NET, vous avez la possibilité d’accéder à vos classes personnalisées (et donc aux expressions rationnelles si vous pouvez les coder correctement pour vos besoins) via des objects d’extension.

Tutoriel ici .

Je voulais aussi faire cela, alors j’ai créé mon propre module xpath de base.