Тип значения тестового параметра в XSL - PullRequest
3 голосов
/ 26 марта 2011

Я получаю это от LibXSLT:

XSLTProcessor::transformToXml(): Invalid type
XSLTProcessor::transformToXml(): xmlXPathCompiledEval: 1 objects left on the stack.

Я передаю param, который может иметь строковое значение или набор узлов.Я пытаюсь проверить, содержит ли она определенную подстроку, и в этом случае назначить это значение другому параметру.

Шаблон вызова:

<xsl:call-template name="img">
    <xsl:with-param name="upload" select="'url.com/image.jpg'"/>
    <xsl:with-param name="w" select="200"/>
    <xsl:with-param name="h" select="200"/>
</xsl:call-template>

Шаблон вызова:

<xsl:template name="img" match="*" mode="w">
    <xsl:param name="upload" select="."/>

    <xsl:param name="JITexternal">
        <xsl:choose>
            <xsl:when test="
                not($upload/meta) and (contains($upload, '.jpg')
                or
                contains($upload, '.png'))
                ">
                <xsl:value-of select="$upload"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="0"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:param>
</xsl:template>

Хотя я не уверен, что вызывает отключение LibXSLT, я думаю, что тот факт, что когда я запускаю эти тесты и значение является строкой, выдает ошибку типа выше.

Но самое главное, есть ли хороший способ проверить тип значения параметра?

ОБНОВЛЕНИЕ: полный * XSL-скрипт на GitHub

1 Ответ

3 голосов
/ 26 марта 2011

Хотя проверка не совсем точно, я обнаружил, что преобразование фрагмента результирующего дерева в string() перед запуском моего теста не позволяет LibXSLT выполнить бомбардировку:

    <xsl:param name="JITexternal">
        <xsl:choose>
            <xsl:when test="starts-with(string($upload), 'http://')">
                <xsl:value-of select="$upload"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="0"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:param>
...