xsl:message 是 XSLT 唯一原生轻量调试手段,需用 terminate="yes" 强制输出、配合 Oxygen/Saxon 等工具查看,且仅限开发阶段使用。
xsl:message 打印调试信息xsl:message 是 XSLT 里唯一原生、轻量、不改变输出的调试手段——它只“说话”,不“做事”。只要处理器支持(Saxon、Xalan、Visual Studio、Oxygen 都行),你就能立刻看到上下文里的变量值、节点名、计数结果。
开始处理订单
当前 product ID:
或 ,但注意:它不生成结果树,只输出调试流xsl:message,别指望在前端看到输出;调试务必换本地工具
terminate="yes" 才能看到消息很多新手写完 却没任何输出,不是代码错了,而是处理器把消息当“日志”发到 stderr 或后台,而你的终端/IDE 没显示或被过滤了。加 terminate="yes" 是最可靠的“强制曝光”方式——它让处理器立刻中断,并把消息作为错误抛出,自然就弹出来了。
个 item → 立即报错并显示数字,方便确认 XPath 是否命中terminate="no",否则转换永远失败-t 参数可同时看到所有 terminate="no" 消息,但默认不显示 和上下文做精准断点XSLT 没有传统断点,但你可以用 + 模拟“条件断点”:只在特定节点、特定属性值、空节点等异常场景触发输出,避免日志刷屏。
警告:@ref 缺失!
✅ 进入 order 模板,name()= ...
的 XPath 表达式始终相对于**当前上下文节点**,不是全局根节点xsl:message 输出不是所有环境都平等对待 。选错工具,等于写了白写。
xsl:message
xsl:message,支持点击跳转到源码行,体验最佳stderr,加 saxon -xsl:style.xsl -s:input.xml -t 可见详细日志;加 terminate="yes" 则直接报错中断XslCompiledTransform(true) 后,F5 调试时可在“输出”窗口看到 xsl:message,且支持设断点+逐行执行xsl:message,即使加了 terminate="yes" 也常静默失败,不要依赖真正卡住人的从来不是语法,而是:以为消息没输出是代码错了,其实是工具没选对,或者没加 terminate="yes" 强制暴露。先在 Oxygen 或 Saxon 命令行跑通一条 ,再往下写——这一步省掉,后面全在盲调。