3

私は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をトリップさせているのかはわかりませんが、これらのテストを実行し、値が文字列である場合、上記の型エラーがスローされるという事実だと思います。

しかし、最も重要なのは、パラメータの値のタイプをテストする良い方法はありますか?

更新: GitHubの完全な XSL スクリプト

4

1 に答える 1

3

正確には型チェックではありませんが、テストを実行する前に結果ツリーフラグメントをに変換すると、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>
于 2011-03-26T01:26:54.567 に答える