2013-11-12 3 views
2

Я пытаюсь реализовать динамическую оценку выражения с использованием расширения Exslt dyn: оценивать ($ expression) в XSLT1.0, но я Получается ошибка ниже.

BW-XML-100006 Job-261000 Error in [Transform_MCIN_XML/Dyn.process/Transform XML] 
The [net.sf.saxon.trans.XPathException] occurred during XSLT transformation: 
net.sf.saxon.trans.XPathException: 
Cannot find a matching 1-argument function named {http://exslt.org/dynamic}evaluate() 
caused by: ; SystemID: tibcr://; Line#: 6; Column#: -1 
net.sf.saxon.trans.XPathException: 
Cannot find a matching 1-argument function named {http://exslt.org/dynamic}evaluate() 

Я могу сделать то же самое с помощью Saxon: оценки ($ ехрг) в Saxon-B XSLT 2.0 двигатель. Однако мне нужно сделать это в XSLT 1.0.

Как устранить эту ошибку и реализовать ее в XSLT 1.0 в Tibco BW?

Любые предложения будут высоко оценены.

спасибо.

Пример XSLT:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
xmlns:dyn="http://exslt.org/dynamic" 
extension-element-prefixes="dyn"> 
    <xsl:variable name="expr" select="not(1=1)"/> 
    <xsl:template match="/"> 
    <eval> 
    <xsl:value-of select="dyn:evaluate($expr)"/> 
    </eval> 
    </xsl:template> 
</xsl:stylesheet> 
+1

Я не понимаю, почему вы хотите ограничить себя использованием XSLT 1.0 с расширением EXSLT, поскольку сообщение об ошибке, ссылающееся на «net.sf.saxon.trans», ясно указывает, что вы используете некоторую версию Saxon 8 или 9, которая должна поддерживать XSLT 2.0 и Saxon. –

+0

Я пытаюсь достичь этого в xslt 1.0, потому что проверка даты проста здесь (tib: validate-dateTime()). Есть ли в XSLT2.0 одна функция проверки даты в строке? – Guru

+0

Я не знаком с tibco и его функциями. С помощью XSLT/XPath 2.0, чтобы проверить, может ли строка быть проанализирована как значение «xs: dateTime», вы можете проверить «foo castable as xs: dateTime». Это пытается проанализировать в соответствии с синтаксисом схемы «xs: dateTime» W3C «yyyy-mm-ddThh: mm: ss» плюс дополнительная информация о часовом поясе, см. Http://www.w3.org/TR/xmlschema-2/# dateTime для деталей. Для других форматов вам нужно будет написать регулярное выражение и/или извлечь компоненты и проверить их, соответственно, попытаться построить 'dateTime'. –

ответ

1

Использование tib:evaluate вместо dyn:evaluate.

В зависимости от того, что еще ваш процесс BW содержит, возможно, потребуется добавить пространство имен ниже процесса, с тем чтобы использовать TIB: оценки() функция:

namespace=http://www.tibco.com/bw/xslt/custom-functions 
prefix=tib 

Чтобы сделать это, вы бы выбрать процесса, нажмите кнопку «Реестр пространства имен» и добавьте пространство имен выше.

+0

Спасибо Том. Хотя это работает для статических условий что-то вроде «1 = 1», но то же самое не работает для динамических условий, таких как значение поля, взятое из входного xml. Что-то вроде проверки определенного поля для определенного значения. Есть ли решение для этого? – Guru

+0

Пожалуйста, обновите вопрос с фактической проблемой, которую вы пытаетесь решить, а не с решением, которое не работает. –

+0

Динамическая оценка с использованием tib: оценка работает. У меня была проблема. Решил это сейчас. Спасибо за ваше предложение. – Guru

Смежные вопросы