Функция translate
принимает на вход строку и , а не набор узлов.Это означает, что запись чего-то вроде:
"translate(/xmlDoc/items/item/text(),'-','')"
или
"translate(/xmlDoc/items/item,'-','')"
приведет к вызову функции только на первом узле (item[1]
).
InXPath 1.0 Я думаю, у вас нет других шансов, кроме как сделать что-то безобразное:
"concat(translate(/xmlDoc/items/item,'-',''),
translate(/xmlDoc/items/item[2],'-',''))"
, которое является приватизированным для огромного списка предметов и возвращает просто строку .
В XPath 2.0 это можно решить, используя для выражений :
"for $item in /xmlDoc/items/item
return replace($item,'-','')"
, который возвращает тип последовательности :
abc cde
PS Не путайте вызовы функций с путями местоположения.Это разные выражения, и в XPath 1.0 их нельзя смешивать.