を使用して文字列値から次の文字を削除する必要がありますxsl 1.0
*, /, \, #, %, !, @, $, (, ), &
私は次のことを思いついた:
translate(translate(translate(string(//xpath/@value),'.',''),'/',''),',','')
上記のアプローチでは、同じコードを何度も複製する必要があります(文字ごとに1回)。
コードを複製せずに同じ目標を達成するにはどうすればよいですか?
ありがとう :-)
このtranslate()
関数は、2番目と3番目の引数として、2文字だけでなく2つの文字列を受け入れます。
translate(., $string1, '')
$string1
にある文字の出現が削除されるコンテキスト(現在の)ノードの文字列値である文字列を生成します。
したがって、あなたは使用することができます:
translate(expressionSelectingNode, "/\#%!@$()&", "")
2番目の引数に含まれる文字を削除します。
もちろん、translate()
関数がXSLTスタイルシート内(または通常はXMLドキュメント内)で使用される場合、およびなどの一部の特殊文字は、<
それぞれおよび&
としてエスケープする必要があります。<
&
これを使用すると非常に強力なので、未知の文字のセットを削除できます。
文字列から数値以外のすべての文字を削除したいとします。文字列にどの文字が含まれるかは事前にわからないため、の2番目の引数でそれらを列挙することはできませんtranslate()
。ただし、次のような不明な文字をすべて削除することはできます。
translate(., translate(., '0123456789', ''), '')
内部translate()
は、任意の数字を含まない文字列を生成します。
外側は、元の文字列からtranslate()
この数字以外の文字(内側で見つかった)をすべて削除しますtranslate()
。したがって、残っているのは数字だけです。
translate(//foo/@value, '*\%!@$&', '')
アンパサンドをエスケープする必要があるXSLTスタイルシートのようなXMLドキュメント内にそれぞれ純粋なXPathが必要です<xsl:value-of select="translate(//foo/@value, '*\%!@$&', '')"/>
。