1

フィルター属性を返す次のテンプレートがあります。

<xsl:template name="have_arch_attrib">
<xsl:variable name="condition_values"/>
<xsl:variable name="security_values"/>
<xsl:variable name="arch_values"/>
<xsl:choose> 
    <xsl:when test=".[@arch]"> <!-- add arch values -->
        <xsl:variable name="arch_values" select=".[@arch]" />
    </xsl:when>

    <xsl:when test=".[@condition]"> <!-- Add condition values -->
        <xsl:variable name="condition_values" select=".[@condition]" />
    </xsl:when>

    <xsl:when test=".[@security]"> <!-- Add condition values -->
        <xsl:variable name="security_values" select=".[@security]"/>
    </xsl:when>
</xsl:choose>
<xsl:attribute name="filter"><xsl:value-of select="concat($condition_values, $security_values, $arch_values)"/></xsl:attribute>

他のソリューションを見てきましたが、これにどのように適用できるかわかりませんか?

誰でも私に手がかりを与えることができますか?

ありがとう、

ラス

4

2 に答える 2

2

エラー メッセージはかなり説明的<xsl:attribute>です。子ノード (要素、テキスト ノード、コメント、または処理命令) を追加した後で、 を使用して要素に属性ノードを追加することはできません。have_arch_attribしたがって、そのエラー メッセージの原因となる問題は、テンプレート自体ではなく、テンプレートを呼び出す前に何が起こるかにあります。

とはいえ、ここで指定したテンプレートでは、作成した後に XSLT 変数の値を変更できないため、必要な結果が得られません。変数を使用してさまざまな値を運ぶのではなく、テンプレートを再構築して を の<xsl:choose> に入れる必要があります。または、実際には存在しない属性<xsl:attribute>を要求するのはエラーではないため、選択を完全に失います。空の文字列を取得するだけです。value-of

<xsl:attribute name="filter">
  <xsl:value-of select="@condition"/>
  <xsl:value-of select="@security"/>
  <xsl:value-of select="@arch"/>
</xsl:attribute>
于 2013-05-31T21:56:35.730 に答える