我有一个XSLT转换示例,它测试给定值是否包含在值列表中。语法如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="field">
<FIELD>
<xsl:choose>
<xsl:when test="current() = ('v1', 'val1')">
YES
</xsl:when>
<xsl:when test="current() = ('v2', 'val2')">
NO
</xsl:when>
<xsl:otherwise>
UNKNOWN
</xsl:otherwise>
</xsl:choose>
</FIELD>
</xsl:template>
</xsl:stylesheet>
测试XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<doc>
<field>v1</field>
<field>val2</field>
<field>v3</field>
</doc>
在线XSLT测试工具正在正确处理,但例如,IntelliJ正在尖叫:
[错误]:'current()=('v1','val1')中的语法错误'
我在标准XSLT教程以及StackOverflow上使用诸如(xslt set syntax),(xslt value in等)之类的短语在互联网上找到这种特定语法的示例存在问题。
该语法是否正确且符合标准,还是某些半官方扩展?
答案 0 :(得分:1)
您展示的是XSLT 2.0语法,错误很可能是由使用XSLT 1.0处理器运行而导致的。
您可以使用:
<xsl:value-of select="system-property('xsl:version')"/>
检查处理器支持的XSLT版本。