---
title: 如何调试 XSLT 和 XQuery
date: 2022-04-13
categories:
  - development
  - software
  - xml
tags:
  - data-mapping
  - xml-editor
  - xmlspy
  - xquery
  - xslt
description: 视频演示：观看如何通过 XSLT/XQuery 的反向映射功能，轻松调试 XSLT 和 XQuery 代码。该功能会突出显示源 XML 以及生成输出结果所用的 XSLT/XQuery 指令，从而方便调试。
---
Status: #blog

Tags:  #data-mapping #xml-editor #xmlspy #xquery #xslt

Categories: [development](/blog/zh/category/development.md) | [xsl](/blog/zh/category/xsl.md) | [xpath+xquery](/blog/zh/category/xpathxquery.md)
# 如何调试 XSLT 和 XQuery

没有什么比从 XSLT 或 XQuery 转换中得到意外结果，然后不得不花费数小时来追踪问题更令人沮丧的了——尤其是在您从其他开发人员那里继承了项目，或者已经好几个月没有查看过代码的情况下。 当然，XMLSpy 已经长期提供了 [XSLT 调试器](https://www.altova.com/zh/xmlspy-xml-editor#xslt_debugger) 和 [XQuery 调试器](https://www.altova.com/zh/xmlspy-xml-editor#xquery_debug)，可以设置断点并逐步执行转换，从而帮助您识别问题。

为了提供更具交互性的调试过程，XMLSpy 还包含 [XSLT/XQuery 反向映射功能](https://www.altova.com/zh/xmlspy-xml-editor#xslt_back-mapping)。

启用反向映射功能后，您只需点击或悬停在输出文档中您想要重点关注的部分，XMLSpy 会立即突出显示负责生成该部分的源 XML 以及相关的 XSLT 或 XQuery 指令。下面我们来看看它是如何工作的。

![使用反向映射进行 XSLT 调试 ](/blog/images/v2017R3_backmapping.jpg)

<!--more-->

## 使用反向映射进行 XSLT 和 XQuery 调试

由于XSLT和XQuery文档通常很长且复杂，因此很难确定意外输出的来源。为了进行有针对性的调试，反向映射功能可以帮助用户立即看到哪些节点和指令导致了当前的输出结果。

启用反向映射功能后，XSLT 转换和 XQuery 执行会以一种方式进行，以便将结果文档映射回原始的 XSLT+XML 或 XQuery+XML 文档。当您将鼠标悬停在结果文档的某个部分时，与该结果节点相关的 XSLT/XQuery 指令和 XML 原始数据将会被高亮显示。

让我们试一试。在开始 XSLT 或 XQuery 转换之前，请点击 XMLSpy 工具栏上的“启用反向映射”按钮。

![使用 XQuery 反向映射进行调试](/blog/images/debug-xquery-backmapping.png)

XMLSpy 会提供一个选项，允许您将源文档和目标文档并排显示，以便您可以在一个窗口中轻松查看相关元素。然后，运行转换。

在以下XSLT转换示例中，我在浏览器视图中将鼠标悬停在一个输出文档中的单选按钮上，XMLSpy会自动突出显示XML和XSLT文档中的相应源节点和指令。

![使用反向映射进行 XSLT 调试](/blog/images/debug-xslt-back-mapping.png)

在文本视图中，无论是XSLT还是XQuery的输出结果，操作方式都是一样的：只需选择需要分析的输出文档的相应部分即可。

简单地点击您的输出结果，即可轻松识别其来源，这对于测试和调试 XSLT 和 XQuery 代码来说，可以节省大量时间。更重要的是，**XMLSpy 能够实现[反向映射](https://www.altova.com/zh/xmlspy-xml-editor#xslt_back-mapping)，而不会以任何方式修改您的输出文档。**

观看这个简短的演示视频，了解如何在 XSLT 和 XQuery 中实现相同的功能。

![](https://www.youtube.com/watch?v=lK1EDLbxxyo)
