私は、探す項目のカンマ区切りリストであるパラメータignoreAttributes
を持っています。変数copyAttrib
をname()
で正確に一致させるかどうかを同じにする必要があります。それぞれの中身を選択しますか?
xsl
変数を再割り当てすることができ、手続き型言語だったら、私はこのようなものを使用したい:
<xsl:variable name="copyAttrib" select="true()">
<xsl:for-each select="tokenize($ignoreAttributes,',')">
<xsl:if test="compare(., name()) != 0">
<xsl:variable name="copyAttrib" select="false()"/>
</xsl:if>
</xsl:for-each>
xsl
が機能しているので、残念ながら、私は、それを行うことはできませんが(そうthis other answerは言います)。変数は一度しか割り当てられません。私は私がでtokenize
とfor-each
ループを回避することができることを知っている(それ以外の場合は、私が尋ねることはない。)
<vsl:variable name="copyAttrib">
<xsl:choose>
<xsl:when>
<xsl:for-each select="tokenize($ignoreAttributes, ',')">
<xsl:if test="compare(., name()) != 0"/>
</xsl:for-each>
<xsl:otherwise>
<xsl:value-of select="false()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
ないまさにそれ:
私は解決策のようなものを見てと思いますignoreAttributesにreplaces
を使用して,
を|
に変更してからmatches
を使用してください。可能であれば、私はignoreAttributes
(これはユーザーが提供している可能性があるためdes)には、正規表現のパターンを変更してそれらをすべてエスケープする特殊文字が含まれている可能性があります。
最小限の完全なXML入力、XSLTコード、出力をご覧ください。 'tokenize'で文脈項目が文字列であるため、あなたのfor-eachのために恐れています。そうすれば、外部コンテキストノードの' name() 'は動作しません。しかし、文脈ノードの名前が '' xsl:variable name = "copyAttrib" select = "name()= tokenize($ ignoreAttribute、 '、')" /> 'を使うと、少なくとも1つのトークンに等しい。 –
tokenize()を使用しているため、XSLT 2.0ソリューションを探していると仮定できますか?あなたは本当に言う必要があります(タグxslt_1.0またはxslt_2を使用します。0)質問に答える人々は多くの時間を無駄にする可能性があるからです。 –