Ошибка XSLT: не удается найти шаблон с именем X

#xml #xslt #xslt-1.0

#xml #xslt #xslt-1.0

Вопрос:

У меня проблема с call-template, я получаю сообщение об ошибке:

Не удается найти шаблон с именем getIndex

Синтаксис кажется правильным. Я попробовал с apply-template , и все было в порядке. Я понятия не имею, почему появилась эта ошибка.

Вот пример файла XSLT:

 <?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2019 (https://www.liquid-technologies.com) -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="Document">
        <xsl:element name="Document">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="Produkt">
        <xsl:element name="Produkt">
            <xsl:element name="Index">
                <xsl:call-template name="getIndex"/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="getIndex">
        <xsl:value-of select="Index"/>
    </xsl:template>

</xsl:stylesheet>
  

Комментарии:

1. Не связанный с вашим вопросом: вы можете упростить свой код, используя элементы literal result — например, <Document> вместо <xsl:element name="Document"> . Используйте xsl:element , когда имя необходимо динамически вычислять во время выполнения.

Ответ №1:

Изменить

 <xsl:template match="getIndex">
  

Для

 <xsl:template name="getIndex">
              ^^^^
  

В общем:

  • Используйте <xsl:template match=" шаблон "> для xsl:apply-templates .
  • Используйте <xsl:template name=" name "> для xsl:call-template .