Могу ли я использовать регулярное выражение в выражении 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.