3

入力に応じて、次のようになる XSL プログラムを生成する XSL プログラムがあります。

<xsl:variable name="patterns"/> <!--empty in this particular case-->

<xsl:template name="token">
    <xsl:for-each select="$patterns/pattern">
...

次に、生成されたスタイルシートを実行すると、Saxon はどうやら何らかの静的分析を行っているようで、次のように不平を言っています。

XPTY0019: Required item type of first operand of '/' is node(); supplied value has item type xs:string

スタイルシートをコンパイルすることさえしません。

私の回避策は $patterns ノードセットでダミー要素を生成することでしたが、ここでよりクリーンなアプローチ、またはコンパイル エラーを抑制する方法はありますか?

4

2 に答える 2

2

http://www.w3.org/TR/xslt20/#variable-valuesによると、「変数バインディング要素に空のコンテンツがあり、select 属性も as 属性もない場合、変数の指定された値は長さゼロの文字列。".

したがって、たとえば<xsl:variable name="patterns" select="()"/>空のシーケンスを変数値としてバインドするなどして、それを変更する必要があります。

于 2012-12-28T09:53:01.847 に答える
0

XSLT 1.0 では (XSLT 2.0 でも同じように機能します)、以下を使用します

<xsl:variable name="patterns" select="/.."/>

$patternsこれにより、変数の型がnode-setであると結論付けるために必要な情報が XSLT プロセッサに提供されます。

于 2012-12-28T14:53:17.710 に答える