Ошибка XQuery при выполнении преобразования xslt

У меня есть рабочая таблица стилей, которая отлично работает с saxon. Теперь я использую простой XQuery:

transform:transform($xmlNode, $xslNode, ()),  

чтобы сделать то же самое, он всегда жалуется на синтаксис в моей таблице стилей, а именно:

<xsl:template match="CrossReference ">
     <xsl:variable name="currentNode" select="//*[@Target=@pointer]"/>
     <xsl:if test="$currentNode/name()!= 'Figure'">

            ...
      </xsl:if>
</xsl:template>

Он всегда жалуется на строку, и сообщение «Произошло исключение при компиляции таблицы стилей: неизвестный тип узла: имя». Кажется, что он не может понять имя функции ()?

Может ли кто-нибудь помочь? Спасибо.


person Kevin    schedule 21.04.2011    source источник


Ответы (1)


Вы не можете использовать вызов функции как часть пути (т. е. после косой черты /) в XPath 1.x. Чтобы обойти это, встроенные функции XPath обычно принимают набор узлов в качестве аргумента и по умолчанию принимают значение ., если аргумент опущен. То есть name() — это сокращение от name(.).

Попробуйте это вместо этого:

<xsl:if test="name($currentNode) != 'Figure'">
person John Kugelman    schedule 21.04.2011
comment
Отлично, сработало. Но мне интересно, почему мой исходный синтаксис работал на саксонском языке? - person Kevin; 21.04.2011
comment
Когда вы запускали его в Saxon, вы использовали процессор XSLT 2.0. Вы не говорите, что вы запускали, когда запускали его из XQuery, но сообщение об ошибке предполагает, что это был процессор XSLT 1.0. Синтаксис a/name() разрешен в XSLT 2.0, но не в 1.0. Понижение ответа, поскольку он вводит в заблуждение. - person Michael Kay; 22.04.2011