xslt - 错误消息 : XTSE0120: No character data is allowed between top-level elements 中存在误导性行号

标签 xslt saxon

这是一篇 self 回答的帖子,因为我花了一些时间才找到以下 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 处理器是否也会给出此误导性错误消息。

希望对某人有帮助......

乌多

最佳答案

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

关于xslt - 错误消息 : XTSE0120: No character data is allowed between top-level elements 中存在误导性行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609290/

相关文章:

perl - XML::LibXSLT 间歇性地抛出样式表编译错误

xml - Xpath/XSLT : check if following sibling is a particular node

java - net.sf.saxon.event.ReceivingContentHandler.startPrefixMapping 处的 NullPointerException(ReceivingContentHandler.java :291)

tomcat - 撒克逊 XMLBeans Tomcat

java - XSL 的后处理步骤

xml - XSLT 转换

xslt - <xsl :number> 的自定义格式

xpath - HiveUDF + saxon 9.1.0.8 + Java8 =创建XPathFactory失败

xml - 使用 saxon xquery 从 xml 中删除元素

xml - xslt 2.0 处理器是否优化仅选择序列中的第一项?