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

StackOverflow https://stackoverflow.com/questions/405060

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Я использую.СЕТЬ, если это имеет значение.

Это было полезно?

Решение

Как отмечалось в других ответах, 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 у вас есть возможность получить доступ к вашим пользовательским классам (и, следовательно, к регулярному выражению, если вы можете закодировать его соответствующим образом для ваших нужд) через объекты расширения.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top