(set)语法中的XSLT值是否是XSLT标准的一部分?

时间:2016-05-12 14:08:57

标签: xml xslt

我有一个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等)之类的短语在互联网上找到这种特定语法的示例存在问题。

该语法是否正确且符合标准,还是某些半官方扩展?

1 个答案:

答案 0 :(得分:1)

您展示的是XSLT 2.0语法,错误很可能是由使用XSLT 1.0处理器运行而导致的。

您可以使用:

<xsl:value-of select="system-property('xsl:version')"/> 

检查处理器支持的XSLT版本。