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>

Винаги се оплаква от реда и съобщението е „Възникна изключение при компилирането на таблицата със стилове: Неизвестен тип възел: име“. Изглежда, че не може да разбере функцията name()?

Може ли някой да помогне? Благодаря.


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