我正在尝试使用以下代码来检查我的变量是否包含单词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
答案 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'
结尾。
如果以结束你要删除的子字符串,请使用上面的内容。如果它包含,那么你可以在另一个问题中找到答案。我建议再看那里。