Могу ли я использовать регулярное выражение в выражении XPath?


что-то вроде .//div[@id='food+] для захвата тегов div с помощью id='foo123'.

Я использую .NET, если это имеет значение.

4 60

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   
   ]

в 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.