Почему мой XSLT-фрагмент вызывает ошибку? - PullRequest
0 голосов
/ 21 июля 2009

Я пытаюсь использовать приведенный ниже код, чтобы проверить, содержит ли моя переменная слово NOT_INTERFACED. Так что я использую функцию конца-с.

Но если это так, я хочу напечатать оставшееся слово минус 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> 

и ошибка

НЕ МОЖЕТ НАЙТИ ФУНКЦИЮ ЗАВЕРШАЕТ. Расположение: неизвестно
java.lang.NullPointerException

Ответы [ 3 ]

5 голосов
/ 21 июля 2009

РЕДАКТИРОВАТЬ: см. Мой комментарий ниже,

Я проверил документацию XPATH 1.0, и она не включает функцию завершения. Вы должны будете выполнить метод подстроки, который я подробно описал ниже - то есть, если вы используете XSLT 1.0 (который использует XPATH 1.0)

РЕДАКТИРОВАТЬ 2: Просто мой комментарий имеет хорошую подсветку синтаксиса:

<xsl:when test="substring($ID_FO, string-length($ID_FO)-14) = '_NOT_INTERFACED'">
1 голос
/ 21 июля 2009

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>

Также вы забыли закрыть элемент xsl:when после атрибута test.

0 голосов
/ 21 июля 2009

Я уже разместил это как комментарий в своем ответе на ваш другой вопрос . Замените всю свою <xsl:choose> конструкцию на эту однострочную:

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

Вам все еще не ясно, содержит ли ваша строка или конец 'NOT_INTERFACED'.

Если заканчивается подстрокой, от которой вы хотите избавиться, используйте вышеприведенное. Если оно содержит , у вас есть ответ на другой вопрос. Я предлагаю второй взгляд там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...