本页描述调试 XSLT 时可能遇到的局限性以及用于消除这些局限性的建议方法。另请参阅产品自述文件,该文件可能包含此调试器的其他局限性。
常规
- 在“调试”透视图外部启动调试会话时,XSLT 上下文和 XSL 变换输出视图不会自动显示:如果在“调试”透视图外部启动 XSL 变换调试会话,则可能会导致不显示“XSLT 上下文”视图和 XSL 变换输出视图。只能通过从工作台菜单栏选择窗口
> 显示视图 > 其他手工打开这些视图。在显示视图对话框中,展开调试节点并选择想要打开的视图。您也可以通过在“调试”透视图中终止所有调试启动并重新启动应用程序来更正这一问题。为了防止再次发生这一问题,一定要在“调试”透视图中启动调试会话。
- 与 Visual Basic 脚本调试器冲突:不能将 XSLT 断点放置在扩展名为
.vbs 的文件中,这是因为它与 Microsoft®
Visual Basic 脚本调试器存在冲突。
- 在 Linux® 上,查看表达式可能显示不正确的结果:为了避免这一问题,应使查看表达式保持最简单并在单步执行时禁用查看表达式。要查看最新的值,在单步执行完成之后重新启用查看表达式。或者,如果您只需对表达式执行一次求值,则使用检查表达式而不使用查看表达式。
- 节点突出显示:如果打开了节点单步执行,则 XSL 源文件在编辑器视图中,并且变换程序装入的 XSL 源代码必须逐字节完全相同,否则节点突出显示将不能正常工作。
- 必须将源位置属性设置为 true:这提供了 SourceLocator,以便可以确定输入(XML)文档中节点的源位置,始终对 XSL 文档启用源位置。缺省情况下,源位置属性是打开的。有关更多信息,请访问
http://xml.apache.org/xalan-j/features.html#source_location。
- 在 Java™
应用程序中不能指定备用 XSLT 处理器或 XML 解析器:调试器依赖于 Xerces 和 Xalan。不能显式地将处理器设置为 Xalan(通过覆盖 TransformerFactory 系统属性)- 这样做会导致调试被关闭。
- 不能序列化/反序列化/克隆 Xalan 组件:在反序列化中可能不会正确解析调试状态和引用。当进行克隆时,可能不会正确初始化字段。另外,序列化/反序列化/克隆目前还存在 Xalan 错误。
- 使用定制跟踪侦听器:将定制跟踪侦听器与调试器配合使用可能会导致意外的结果。
- 断点:XSLT 样式表中的断点仅在模板规则中受支持。例如,全局变量上的断点不受支持。
- 生成的文件长度:超过 2147483647 个字节的生成文件是不受支持的。
- 浏览器视图链接和图像:仅当您指定输出文件,并且通过该输出文件的路径能够找到链接和图像时,“变换输出”视图的浏览器视图中的链接和图像才会起作用。可以在启动配置中指定输出文件。
- 浏览器中的 XML 输出:在文档中的所有标记都具有相应的结束标记之前,XML 输出在浏览器中将不会正确显示。这是浏览器的局限性。
- 在输入 XML 文档中设置断点:如果在用于 XSL 变换的输入 XML
文档中设置断点,则当该节点是当前上下文节点,但只有当在包含元素开始标记或元素结束标记的结束“>”的行上设置断点时,调试器才会停止。
- XSLT 上下文视图:如果已对节点列表排序,XSLT 上下文视图将以文档顺序(而不是排序顺序)显示节点列表。
多语言局限性
仅当您单步跳入
Java 应用程序中的样式表时才存在下列局限性:
- 放至框架和热代码替换:在调试从
Java 调用的 XSLT 时,不要使用放至框架和热代码替换功能。
- 增量功能部件必须关闭:必须关闭增量功能部件。如果打开它,就可以采用增量方式构建 DTM(输入的内部表示),而不是等待对整个输入进行语法分析。缺省情况下,此功能部件是关闭的。有关更多信息,请访问
http://xml.apache.org/xalan-j/features.html#incremental。
- 有限支持生成的源代码中用户提供的 URIResolvers:当使用定制 URI-resolver 来解决导入、包含和文档调用时,在调试器中可能无法查看文档的源代码。但是,变换仍将继续进行。
- 生成的源代码中的外部实体引用不受支持:如果源 XML 文档包含直接插入 DOCTYPE,并且外部实体声明存在于生成的源代码(SAX 或 DOM)方案中,则以后使用该外部实体可能会产生不正确的结果。
- 调试将 JAXP 与 DOMSource 源对象配合使用的变换:当调试将 JAXP 与作为 DOMSource 的源对象配合使用的 XSL 变换时,必须对 DOMSource 设置 SystemId。
当调试调用一个或多个样式表的
Java(这些样式表又调用 Java)时,常规混合语言调试局限性可能也适用。可以在 Java 和混合语言调试文档中找到这些局限性。