错误消息中的误导性行号:XTSE0120:顶级元素之间不允许使用字符数据

时间:2013-07-12 07:04:54

标签: xslt saxon

这是一个自我回答的帖子,因为我花了一些时间来找到以下XTSE0120的原因。 我对XSLT很陌生并犯了一个错误并在<xsl:template>之外放了一些文字:

bellack@bellack-TP-T430u:~$ cat -n /tmp/x.xsl
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <xsl:stylesheet 
     3   version="2.0" 
     4   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     5 >
     6 <xsl:output method="text"/>
     7 <xsl:template name="build" match="/">
     8 <!-- 
     9   a lot of xslt code lines 
    10   -->
    11 </xsl:template>
    12 ****** misplaced text ****************
    13 </xsl:stylesheet>

由于这是不允许的,我收到错误XTSE120,请参阅http://www.w3.org/TR/xslt-30/#err-XTSE0120

bellack@bellack-TP-T430u:~/workspace/tembanking/generator/crud$ java -jar ../lib/saxon9.jar -xsl:/tmp/x.xsl -s:/dev/null
Error at xsl:template on line 7 of file:/tmp/x.xsl:
  XTSE0120: No character data is allowed between top-level elements
Failed to compile stylesheet. 1 error detected.

但是第7行报告了错误,并且由于x.xsl有几百行,我在第7行找到了一些错误的东西是徒劳的,其中错误实际上是在文件的末尾。

我不知道除了撒克逊以外的其他XSLT处理器是否也会出现这种误导性的错误消息。

希望有人帮助......

1 个答案:

答案 0 :(得分:1)

Saxon只保留元素节点的行号信息,而不保留文本节点的行号信息,因此我们很难报告错误在文本节点中的罕见情况的准确位置。