2009-07-21 11 views
0

以下のコードを使用して、変数にNOT_INTERFACEDという単語が含まれているかどうかを確認しています。 私はends-with関数を使用しています。私のXSLTフラグメントがエラーを引き起こすのはなぜですか?

しかし、残っている単語からNOT_INTERFACEDを差し引いて印刷します。

しかし、エラーが発生しています。私のJavaプログラムはこのテンプレートを呼び出していますが、例外はありません。

私は間違った構文をしていますか?

<xsl:choose> 
    <xsl:when test="ends-with($ID_FO, 'NOT_INTERFACED')"> 
    <xsl:value-of select="substring-before($ID_FO, 'NOT_INTERFACED')"/> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:value-of select="$ID_FO"/> 
    </xsl:otherwise> 
</xsl:choose> 

とエラーが

では、関数がで終わる見つけることができませんでした。 LOCATION:不明
java.lang.NullPointerExceptionが

+0

のxsl:テストは= "終了 - と($ ID_FO、 '_ NOT_INTERFACED')"

+0

あなたはどちらのJavaのバージョンを使用していますか?そして、余分なXML解析ライブラリ(Xercesなど)を使用していますか? – GaZ

+0

これは本質的にhttp://stackoverflow.com/questions/1153304の複製です – Tomalak

答えて

5

編集:私はXPath 1.0のドキュメントをチェックし、それが終了する-と機能が含まれていない、以下

を、私のコメントを参照してください。あなたは、私が下に詳細なsubstringメソッドを行う必要があるでしょう - あなたは(XPATH 1.0を使用しています)XSLT 1.0を使用している場合、つまり

EDIT 2:ちょうどので、私のコメントは、いくつかの素晴らしいシンタックスハイライトを持っています

<xsl:when test="substring($ID_FO, string-length($ID_FO)-14) = '_NOT_INTERFACED'"> 
+0

あなたはXSLTのどのバージョンを使用していますか?私は終わりだと思います.1.0に入っていないかもしれないが、その場合にはもっと派手なフットワークが必要です。 XSLTは1から数えて0なので、私のインデックスをチェックしてください。私は間違いを犯す傾向があります。 – jcb

+0

私はそれが実際には本当に確信しています。 -14 not -15。文字列の長さは、文字列が単純に_NOT_INTERFACEDで、インデックスが1から始まる場合は15になるので、14を減算したいからです。私たちのプログラマに変更を加え、0ではなく1で始めるのが良いと思った理由は分かりません。 – jcb

+0

これは修正しましたか?あなたはそれを試しましたか? – jcb

1

XSLTパーサは大文字と小文字が区別されます - これを使用してみてください:

<xsl:choose> 
    <xsl:when test="ends-with($ID_FO, 'NOT_INTERFACED')"> 
     <xsl:value-of select="substring-before($ID_FO, 'NOT_INTERFACED')"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$ID_FO"/> 
    </xsl:otherwise> 
</xsl:choose> 

また、あなたがtest属性の後xsl:when要素を閉じるのを忘れていました。

+0

皆さん...私の最後からタイプエラーはありません...私がここで入力したかもしれないのは、単にロジックmを使って説明することでした。私は文法エラーをしていません...私が得るエラーは、終了点が見つかりませんでした:(.... \ 助けてください –

+0

あなたが見ているエラーとエラーの原因となっている実際のコードを投稿してください。 –

+0

ます。 ます。 < XSL:そう> ごみ や機能を見つけることができませんでしたされ、エラーがWITHを終了 LOCATION:不明java.lang.NullPointerExceptio n –

0

私は既に答えとしてyour other questionにコメントとして投稿しました。このワンライナーであなたの全体の<xsl:choose>構造物を交換してください:

<xsl:value-of select=" 
    substring-before(concat($ID_FO, 'NOT_INTERFACED'), 'NOT_INTERFACED') 
" /> 

あなたの文字列'NOT_INTERFACED'で終わる含まれているかどうかをあなたはまだ明らかではありません。

が末尾にあるで終わる場合は、上記を使用してください。 が含まれている場合は、もう1つの質問に答えがあります。そこにもう一度見てみることをお勧めします。

関連する問題