EXSLT предоставляет набор полезных расширений для XSLT. Вероятно, большинство из нас использовали функцию exslt: node-set. Одна из других функций, определяемых EXSLT, - это exslt: object-type. К сожалению, большинство браузеров (кроме Firefox), похоже, не поддерживают эту функцию. Ссылка: http://greenbytes.de/tech/tc/xslt/ Пока мне удалось реализовать эту функцию в IE с помощью скрипта, я, похоже, не нашел обходного пути для Google Chrome. (Это один из тех случаев, когда IE кажется лучше Chrome).
Основная цель моего приложения - выяснить, является ли аргумент «набором узлов» или нет. Или, если быть более точным - если аргумент можно выбрать в xsl: apply-templates.
Реализация IE может выглядеть примерно так:
<msxso:script language="JScript" implements-prefix="exslt"> <![CDATA[ this['object-type'] = function(x) { switch (typeof x) { case "number": return "number"; case "string": return "string"; case "object": return "node-set"; default: return typeof x } } ]]> </msxso:script>
Итак, вопрос - как сделать что-то подобное в Google Chrome.
Пожалуйста, поймите, что решение состоит не в том, чтобы вручную переписывать исходную таблицу стилей, поскольку это должен быть полностью автоматизированный процесс.
Мой сценарий следующий: агент отправляет XML + XSLT, процесс автоматически перезаписывает XSLT для преобразования xsl: value-of в xsl: apply-templates. Хотя тип атрибута select для xsl: value-of не имеет значения, xsl: apply-templates завершится ошибкой, если атрибут select не может быть преобразован в набор узлов.
object-type
EXSLT, я думал, что он использует libxslt в качестве процессора XSLT, а libxslt поддерживает эту функцию. Возможно, они отключили его в Chrome, и кто-то должен сделать запрос функции, чтобы включить его. - person Martin Honnen   schedule 28.08.2013