Могу ли я использовать регулярное выражение в выражении XPath? - PullRequest
60 голосов
/ 01 января 2009

Что-то вроде .//div[@id='foo\d+] для захвата тегов div с id='foo123'.

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

Ответы [ 4 ]

91 голосов
/ 02 января 2009

Как отмечали другие ответы, XPath 1.0 не поддерживает регулярные выражения .

Тем не менее, у вас есть следующие опции :

  • Используйте выражение XPath 1.0 (обратите внимание на функции starts-with() и translate()) как это:
.//div
   [starts-with(@id, 'foo') 
  and 
   'foo' = translate(@id, '0123456789', '')
  and
   string-length(@id) > 3   
   ]
28 голосов
/ 01 января 2009

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+')].

2 голосов
/ 01 января 2009
В 1000

Учебник здесь .

0 голосов
/ 02 июля 2010

Я тоже хотел это сделать, поэтому создал свой собственный базовый модуль xpath .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...