Функция XPath на нескольких текстовых узлах

Используя XPath 1.0, вы хотите получить список текстовых узлов, применяя функцию XPath 'substring' к каждому текстовому узлу

substring(//p/text(), 10) 

дает только одну первую подстроку текста, когда

//p/text()

дает все из них, но хочет, чтобы все подстроки были установлены

ИЗМЕНИТЬ:

Пытался

//p/substring(text(), 10)

Говорит о недопустимом выражении XPath

Как я могу этого добиться?

заранее спасибо


person Ioseb Khutsishvili    schedule 19.01.2017    source источник
comment
То, что вы описываете, невозможно в одном выражении XPath 1.0 без использования пользовательских функций. В каком контексте вы используете этот XPath (XSLT, .NET, Java и т. Д.)? Покажите нам код, в котором вы вызываете этот XPath.   -  person JLRishe    schedule 19.01.2017
comment
Конечно, я могу сделать это из кода, но мой текущий код является общим, и я хочу сделать это с помощью XPath, спасибо за ответ, будет работать над решением, которое вы описали :)   -  person Ioseb Khutsishvili    schedule 19.01.2017
comment
EXSLT определяет функцию, которая позволит вам сделать это: dyn: map (// p / текст, 'substring (., 10)'). На этой странице говорится, что нет известных процессоров XSLT или сторонних библиотек, поддерживающих эту функцию, но если ваш механизм XPath поддерживает ее или что-то подобное, вы можете это использовать.   -  person JLRishe    schedule 19.01.2017
comment
Спасибо за ответ, сейчас попробую   -  person Ioseb Khutsishvili    schedule 19.01.2017


Ответы (1)


Если вам нужен набор строк в результате выражения XPath 1.0, то вам не повезло, потому что в XPath 1.0 нет такого типа данных: единственные доступные коллекции - это коллекции узлов, и вы можете только выбирать узлы которые уже существуют, вы не можете создавать новые.

С XPath 2.0 это проще простого:

//p/text()/substring(., 10)

Так что, если возможно, найдите себе процессор XPath 2.0.

person Michael Kay    schedule 19.01.2017