17

を使用して文字列値から次の文字を削除する必要がありますxsl 1.0

*, /, \, #, %, !, @, $, (, ), &

私は次のことを思いついた:

translate(translate(translate(string(//xpath/@value),'.',''),'/',''),',','')

上記のアプローチでは、同じコードを何度も複製する必要があります(文字ごとに1回)。

コードを複製せずに同じ目標を達成するにはどうすればよいですか?

ありがとう :-)

4

2 に答える 2

23

このtranslate()関数は、2番目と3番目の引数として、2文字だけでなく2つの文字列を受け入れます。

translate(., $string1, '')

$string1にある文字の出現が削除されるコンテキスト(現在の)ノードの文字列値である文字列を生成します。

したがって、あなたは使用することができます

translate(expressionSelectingNode, "/\#%!@$()&", "")

2番目の引数に含まれる文字を削除します

もちろん、translate()関数がXSLTスタイルシート内(または通常はXMLドキュメント内)で使用される場合、およびなどの一部の特殊文字は、<それぞれおよび&としてエスケープする必要があります。&lt;&amp;

これを使用すると非常に強力なので、未知の文字のセットを削除できます。

文字列から数値以外のすべての文字を削除したいとします。文字列にどの文字が含まれるかは事前にわからないため、の2番目の引数でそれらを列挙することはできませんtranslate()。ただし、次のような不明な文字をすべて削除することはできます。

translate(., translate(., '0123456789', ''), '')

内部translate()は、任意の数字を含まない文字列を生成します。

外側は、元の文字列からtranslate()この数字以外の文字(内側で見つかった)をすべて削除しますtranslate()。したがって、残っているのは数字だけです。

于 2012-10-26T14:48:07.527 に答える
17

translate(//foo/@value, '*\%!@$&', '')アンパサンドをエスケープする必要があるXSLTスタイルシートのようなXMLドキュメント内にそれぞれ純粋なXPathが必要です<xsl:value-of select="translate(//foo/@value, '*\%!@$&amp;', '')"/>

于 2012-10-26T14:40:40.053 に答える