当我在Internet Explorer中打开时,我在xml文件中应用我的xslt 2.0时出现错误

时间:2012-08-30 09:46:22

标签: xml xslt xslt-2.0

当我应用到xml文件时,我有xsl文件。当我在Internet Explorer中查看它时,我收到错误。

Expected token ']' found 'NAME'. threshold[substring-before(normalize-space(), ' ')-->castable <--as xs:integer]

这是我的xsl文件。

<xsl:template match="threshold[substring-before(normalize-space(), ' ')castable as xs:integer]">
<xsl:variable name="vNorm" select = "translate(normalize-space(), '%', '')"/>
<xsl:variable name="vAtUnit" select = "substring-after($vNorm, ' ')"/>
<xsl:variable name="vUnit" select ="replace($vAtUnit, '([^0123456789]+)(\d*)', '$1')"/>
<xsl:variable name="vLastPart" as="xs:string" select ="substring-after($vAtUnit, $vUnit)"/>
<xsl:variable name="vNum" select="concat($vLastPart, '100'[not($vLastPart)])"/>
    <threshold>
        <t-r-value><xsl:value-of select="substring-before(., ' ')"/></t-r-value>
        <unit><xsl:value-of select="normalize-space($vUnit)"/></unit>
        <samplepct><xsl:value-of select="$vNum"/></samplepct>
    </threshold>
    <xsl:call-template name="tested"></xsl:call-template>
</xsl:template>
<xsl:template name="tested">
<xsl:for-each select="../following-sibling::interval-repeats[1]/ repeat[ count(current()/preceding-sibling::threshold) + 1]" >
<xsl:variable name="vNormrep" select = "translate(normalize-space(), '%', '')"/>
<xsl:variable name="vAtUnitrep" select = "substring-after($vNormrep, ' ')"/>
<xsl:variable name="vUnitrep" select ="replace($vAtUnitrep, '([^0123456789]+)(\d*)', '$1')"/>
<xsl:variable name="vLastPart" as="xs:string" select ="substring-after($vAtUnitrep, $vUnitrep)"/>
<xsl:variable name="vNumrep" select="concat($vLastPart, '100'[not($vLastPart)])"/>
    <repeat>
        <t-r-value><xsl:value-of select="substring-before(., ' ')"/></t-r-value>
        <unit><xsl:value-of select="normalize-space($vUnitrep)"/></unit>
        <samplepct><xsl:value-of select="$vNumrep"/></samplepct>
    </repeat>
</xsl:for-each>

任何人都可以帮助我吗

提前致谢 Karthic

2 个答案:

答案 0 :(得分:2)

浏览器只支持XSLT 1.0和一些EXSLT扩展,如果你想使用XSLT 2.0,你需要使用像Saxon 9,AltovaXML或XmlPrime这样的XSLT 2.0处理器。如果您想使用XSLT 2.0客户端,您可以检查Saxon CE http://www.saxonica.com/ce/download.xml是否可以选择。

[编辑] 至于尝试在XSLT 1.0中实现整数检查,您可以尝试

<xsl:template match="threshold[not(translate(substring-before(normalize-space(), ' '), '0123456789', ''))]">

该检查删除任何数字,然后检查结果是否为空字符串,这可能足以检查整数

答案 1 :(得分:1)

一个简短的XPath表达式,用于验证字符串是否可以转换为整数

$x = floor($x)

正如在另一个答案中已经提到的,主要的五个浏览器都没有支持XSLT 2.0。目前在浏览器中使用XSLT 2.0的方法由 Saxon CE 提供。