Oxygen XML Editor 的 XSLT 调试需用 Saxon-EE 引擎、正确配置调试启动器、在有效指令行设断点、使用 file:/ 格式路径,并确保 XSLT 3.0 声明版本以支持 xsl:try 和高阶函数调试。

Oxygen XML Editor 对 XSLT 开发和调试的支持非常成熟,但默认配置下容易卡在“看不到输出”或“断点不生效”上。关键在于确认你用的是 XSLT 2.0/3.0 引擎、正确设置了调试启动器,并且源 XML 和样式表路径是相对 Oxygen 工作区解析的(不是绝对路径乱跳)。
怎么设置 XSLT 调试启动器(避免“Debugger not available”错误)
Oxygen 不会自动启用调试,必须手动绑定一个支持调试的处理器——Saxon-EE 是唯一被 Oxygen 官方完整支持调试的引擎(Saxon-HE 和 Xalan 不支持断点)。
- 进入
Options → Preferences → XML / XSLT-FO / XQuery → Debuggers → XSLT Debugger - 勾选
Enable XSLT debugging - 在
Processor下拉菜单中选择Saxon-EE(需提前在Libraries页签里配置好saxon9ee.jar路径) - 确保
Use current document as input或指定正确的Input URL;如果输的是本地文件路径,用file:/前缀(如file:/C:/data/input.xml),别用C:\这种 Windows 原生路径
怎么加断点并触发调试(为什么 F5 没反应)
断点只能加在 <xsl:template>、<xsl:for-each>、<xsl:apply-templates> 或任意带 select/test 属性的指令行上——纯文本节点或注释行无法设断点。
- 在编辑器左侧灰色边栏单击即可添加断点(出现红点);悬停可查看是否被识别为“valid breakpoint location”
- 右键点击 XSLT 文件 →
Debug As → XSLT Transformation(不是“Run As”) - 若弹出
No valid input specified,说明没配Input URL或当前文档不是 well-formed XML;检查底部状态栏是否显示XML而非Text - 调试启动后,变量视图里
$input显示源树,$context是当前匹配节点,Templates标签页可跳转到任意模板
怎么调试 XSLT 3.0 的 xsl:try 和高阶函数
XSLT 3.0 特性依赖 Saxon-EE 且需显式声明版本,否则 Oxygen 会降级为 2.0 模式,导致 xsl:try 报错或函数不可见。
- 在 XSLT 文件首行确认有
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> -
xsl:try内部的断点只有在异常实际抛出时才触发;正常流程下xsl:catch块不会停,除非你在其中某行手动加断点 - 调试
function时,调用处(如{my:func($x)})不能设断点,必须进到函数定义体内部第一行设 - 使用
map{}或array{}时,变量视图里展开后可能显示[object Object]—— 这是 Oxygen 的显示限制,实际值可用watch表达式输入?size()或?1查看
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:try>
<xsl:variable name="data" select="doc('missing.xml')"/>
<xsl:sequence select="$data"/>
<xsl:catch>
<!-- 在这行设断点,仅当 missing.xml 找不到时才会停 -->
<error>File not found</error>
</xsl:catch>
</xsl:try>
</xsl:template>
</xsl:stylesheet>最容易被忽略的是:Oxygen 的调试会话不继承 shell 环境变量,所以如果你在 xsl:document 中写相对路径,它基于的是 XSLT 文件所在目录,而不是你打开 Oxygen 时的当前工作目录。路径问题引发的空白输出,比逻辑错误更难排查。










