Требуемая обработка не может быть задана просто как одно выражение XPath 1.0 , потому что по определению любая функция, которая ожидает один строковый аргумент, но получает набор узлов, принимает строковое значение только первого(в порядке документа) узел этого набора узлов.
Также, в отличие от XPath 2.0 в XPath 1.0, нельзя указывать вызов функции в качестве шага расположения.
Поэтому одним из решений является выдача этого выражения XPath :
substring-after((id('product-grid')//p[@class="price"])[$k], "Price: ")
N
раз, заменяя $k
в каждом выражении на 1,2,..., N
, где N
- это результат вычисления другогоВыражение XPath:
count(id('product-grid')//p[@class="price"])
Используя XPath 2.0, можно сделать это с помощью этого простого и единственного выражения :
id('product-grid')//p[@class="price"]/substring-after(., "Price: ")
, которое при оценке выдает именно требуемую последовательностьстроки.