这是一篇自我回答的帖子,因为我花了一些时间才找到以下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行附近徒劳地寻找错误,错误实际上在文件的末尾。
我不知道除了saxon之外的其他XSLT处理器是否也给出了这种误导性的错误消息。
希望能帮助到别人。。。
Udo
Saxon只保留元素节点的行号信息,而不保留文本节点的行号,因此我们很难报告错误发生在文本节点中的罕见情况下的准确位置。