Если вы выполняете преобразование с помощью Visual Studio X , где X не превышает 2008, это будет обработано XSLT 1.0 процессор (.NET XslCompiledTransform
или XslTransform
). XSLT 1.0 использует XPath 1.0 , а не XPath 2.0 и его F & O (Функции и операции), которая стала Рекомендацией W3 только в прошлом году.
У вас есть два варианта :
Используйте совместимый процессор XSLT 2.0 . Если вы предпочитаете оставаться на платформе .NET, тогда вам подойдет Saxon.NET
Просто используйте функцию XPath 1.0 starts-with()
, которая достаточна для решения текущей проблемы.
Выражение: starts-with(., 'P:Interfaces')
оценивается как true()
, если строковое значение узла контекста начинается со строки 'P: Interfaces', и false()
в противном случае.
Еще одной функцией Xpath 1.0, которая может пригодиться для такого типа обработки, является функция contains()
.
Функция Xpath 2.0 ends-with()
может быть эмулирована в XPath 1.0 следующим образом:
ends-with(s1, s2)
==== substring
(с1, string-length
(с1) - string-length
(с2) +1) = с2
, где «===
» означает «эквивалентно».
Здесь мы также использовали функции XPath 1.0 substring()
и string-length()
.