Могу ли я использовать регулярное выражение в выражении XPath?
что-то вроде .//div[@id='food+]
для захвата тегов div с помощью id='foo123'
.
Я использую .NET, если это имеет значение.
4 ответа:
как отметили другие ответы,XPath 1.0 не поддерживает регулярные выражения.
тем не менее, у вас есть следующие варианты:
- используйте выражение XPath 1.0 (обратите внимание на
starts-with()
иtranslate()
функции) такой:.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
использовать EXSLT.NET -- есть способ используйте его функции непосредственно в выражениях XPath без необходимости использовать XSLT. Функции расширения EXSLT, которые позволяют использовать регулярные выражения:
regexp:match()
,regexp:replace()
иregexp:test()
использоватьXPath 2.0/XSLT 2.0 и его встроенная поддержка регулярных выражений (функций матчи(),заменить() и tokenize ())
в XPath 2.0 есть некоторые функции, которые поддерживают регулярные выражения:
matches()
,replace()
,tokenize()
.в XPath 1.0 отсутствует поддержка регулярных выражений.
для .NET вы можете использовать движок XPath в Saxon.Net чтобы иметь поддержку XPath 2.0.
Итак, при использовании движка XPath 2.0 в Saxon.NET, ваш пример превратится в:
.//div[matches(@id,'foo\d+')]
.
в .NET у вас есть возможность получить доступ к вашим пользовательским классам (и, следовательно, регулярное выражение, если вы можете кодировать его соответствующим образом для ваших нужд) через объекты расширения.
учебник здесь.
Я также хотел сделать это, чтобы создать свой собственный базовый модуль xpath.