2017-01-19 3 views
0

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

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

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

//p/text() 

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

EDIT:

Пробовал

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

Says выражение недействителен XPath

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

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

+0

То, что вы описываете, невозможно в одном выражении XPath 1.0 без использования пользовательских функций. В каком контексте вы используете этот XPath (XSLT, .NET, Java и т. Д.)? Пожалуйста, покажите нам код, в котором вы ссылаетесь на этот XPath. – JLRishe

+0

Конечно, я могу сделать это из кода, но мой текущий код является общим и хочет сделать это с помощью XPath, спасибо за ответ, будет работать над решением, которое вы описали :) –

+0

EXSLT определяет функцию, которая позволит вам сделать это: [dyn: map (// p/text, 'substring (., 10)')] (http://exslt.org/dyn/functions/map/index.html). Эта страница говорит, что нет известных XSLT-процессоров или сторонних библиотек, которые поддерживают эту функцию, но если ваш движок XPath поддерживает его или что-то подобное, вы можете использовать это. – JLRishe

ответ

1

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

с XPath 2.0 это кусок пирога:

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

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