为什么我的XSLT片段导致错误?

时间:2009-07-21 13:53:35

标签: xslt

我正在尝试使用以下代码来检查我的变量是否包含单词NOT_INTERFACED。 所以我使用了end-with函数。

但如果确实如此,我想打印剩下的单词减去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 个答案:

答案 0 :(得分:5)

编辑:请参阅下面的评论,

我检查了XPATH 1.0文档,但它没有包含end-with功能。您将不得不执行我在下面详述的子字符串方法 -​​ 即如果您使用的是XSLT 1.0(使用XPATH 1.0)

编辑2:我的评论有一些很好的语法突出显示:

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

答案 1 :(得分: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>

此外,您忘记关闭xsl:when属性后的test元素。

答案 2 :(得分:0)

我已在your other question的答案中将其作为评论发布。用这个单行替换整个<xsl:choose>构造:

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

您仍然不清楚字符串是否包含是否以 'NOT_INTERFACED'结尾。

如果结束你要删除的子字符串,请使用上面的内容。如果它包含,那么你可以在另一个问题中找到答案。我建议再看那里。