【问题标题】:Debugging 'Error loading stylesheet: XPath parse failure: Name or Nodetype test expected:'调试“加载样式表时出错:XPath 解析失败:预期名称或节点类型测试:”
【发布时间】:2013-11-08 21:14:00
【问题描述】:

我正在使用 XSLT 样式表将 EAD xml 文件转换为 web 上的 html 查找帮助(非常标准的做法)。

但是,我一直想在 Firefox 中通过引用 XML 文件顶部的样式表并使用浏览器打开 XML 文件来预览它。这是使用不同的样式表,但使用我想使用的样式表,我只得到错误:

加载样式表时出错:XPath 解析失败:需要名称或节点类型测试:

如果我可以获得更具体的错误日志记录,那就太好了,这样它就可以告诉我在 XSLT 文件中的哪个位置需要 Name 或 Nodetype 测试,但事实并非如此。

当我在 Oxygen XML 编辑器中打开样式表和 xml 文件并运行转换时,我得到了正确的 HTML 文档,所以我不知道如何调试它并弄清楚为什么它没有从 XML 呈现带有引用的样式表的文件。我更喜欢这种方式,因为它更适合我们的工作流程,只需将 XML 文件上传到 Web 服务器上与样式表相同的目录(而不是我必须转换 XML 文件并将 HTML 文件上传到服务器......你知道,Oxygen 编辑器的许可证并不便宜)。

是否有强制更多详细信息说明为什么在浏览器中失败?

【问题讨论】:

  • 使用 Oxygen,在为浏览器开发时,请确保选择 XSLT 1.0 处理器,如 Saxon 6.5 或 Xalan。如果您使用 Oxygen、Saxon 9.5 和 XSLT 2.0 进行开发,那么像 Firefox 中的 XSLT 1.0 处理器当然会在代码中的任何 XPath/XSLT 2.0 构造上产生语法错误。
  • 啊,我明白了。谢谢你。那么如果很多浏览器还在 XSLT 1.0 处理器上,是不是不能强制人们的浏览器去解析 XSLT 2.0 呢?是否有更好的方法来为用户断言 XSLT 2.0 转换(除了在客户端之外执行该过程......我们目前正在通过 Convio 运行我们的 XML,这似乎是一个无法定制的盒子)。如果你不确定也没关系。
  • 浏览器一般只实现1.0。如果您想在浏览器中执行 XSLT 2.0,则必须使用 JavaScript 解决方案,例如 Saxon CE
  • Saxonica 已将 XSLT 2.0 作为 Saxon-CE 引入浏览器,这是一个开源项目,源于将 Saxon 9 HE 交叉编译为 Javascript。这可能是一个选项saxonica.com/ce/index.xml
  • @MartinHonnen:也许您可以将其中几个 cmets 放入答案中,以便我们可以将这个问题从“未回答”列表中删除?

标签: html xml xslt xpath


【解决方案1】:

Oxygen 允许您开发 1.0、2.0 和 3.0 版本的 XSLT 样式表。然而,当前浏览器中的 XSLT 处理器都是 XSLT 1.0 处理器。因此,如果您想使用 Oxygen 开发要部署在浏览器中的样式表,那么请确保您编写 XSLT 1.0 版样式表并配置 Oxygen 以使用 Saxon 6.5 或 Xalan(两者都是 XSLT 1.0 处理器)来运行和测试您的代码。

我怀疑您将 Oxygen 与 Saxon 9(一个 XSLT 2.0 处理器)一起使用,因此如果您在代码中使用了任何 XSLT/XPath 2.0 only 构造,您会在浏览器中遇到错误。

例如,在 XSLT/XPath 2.0 中,您可以编写 /root/foo/bar/tokenize(., '\|'),其中路径表达式的最后一步是函数调用;在 XSLT/XPath 1.0 中,这会产生错误。

但是,Saxonica 已将 XSLT 2.0 作为 Saxon-CE 引入浏览器,这是一个开源项目,由将 Saxon 9 HE 交叉编译为 Javascript 产生。这可能是一种选择,请参阅http://saxonica.com/ce/index.xml

【讨论】:

    【解决方案2】:

    浏览器内 XSLT 1.0 实现的错误报告通常很差;如果我是你,我会首先使用 1.0 实现检查样式表,该实现提供良好的错误消息(例如,xsltproc 和 Saxon 6.5),然后(如果浏览器持续引发错误)使用通常的 needle-in-a-干草堆各种技术,试图找出问题出在哪里。如果您能找出问题出在在哪里,而不是为什么,那么在 Stack Overflow 或 Mulberry Technologies 的 xsl-list 上询问将是合乎逻辑的下一步.

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2019-05-19
      相关资源
      最近更新 更多