---
title: "使用 XSLT3 数学函数进行数据映射"
date: "2021-04-14"
categories: 
  - "data-integration"
  - "xpath"
  - "xquery"
tags: 
  - "data-mapping"
  - "mapforce"
  - "xml-data-mapping"
  - "xslt3"
description: 探索XSLT3如何通过高级数学函数，包括三角函数，来增强XML数据映射功能，从而利用MapForce解决复杂的集成难题。
---
Status: #blog

Tags:  #data-mapping #mapforce #xml-data-mapping #xslt3

Categories: [data-integration](/blog/zh/category/data-integration.md) | [xpath+xquery](/blog/zh/category/xpathxquery.md) | [xpath+xquery](/blog/zh/category/xpathxquery.md)
# 使用 XSLT3 数学函数进行数据映射

XSLT3 增加了三角函数和其他高级数学函数，以及新的格式化函数，用于收集环境变量的函数，等等，从而扩展了 XSLT 和 XSLT2 的 XML 转换标准。数据分析师和其他数据专业人士可以应用 XSLT3 函数 [为了解决 XML 数据映射和集成方面的难题](https://www.altova.com/zh/mapforce) 需要进行复杂数学计算的应用。下面我们来看一些 MapForce 的示例： [使用 XSLT3 进行数据映射](https://www.altova.com/zh/xslt-3#mapforce) 使用三角函数和其他复杂数学表达式的数学函数。

![](/blog/images/shutterstock_248233801.jpg)

<!--more-->

MapForce 提供内部处理引擎，这些引擎针对各种数据类型和应用进行了定制。

[![选择用于XSLT3数据映射的处理引擎](/blog/images/processing-engine.png)](processing-engine.png)

当您选择 XSLT3 引擎时，以下所示的函数将被添加到“函数库”窗口中，并可用于数据映射

[![使用 XSLT3 进行数据映射的 XQuery 函数](/blog/images/xslt3-functions.png)](xslt3-functions.png)

例如，我们可以创建一个数据映射，该映射可以根据存储在 XML 文件中的输入值，生成正弦、余弦和正切值。原始数据以 CSV 文件的形式提供，我们将其导入到 XMLSpy 中，XMLSpy 是全球销量最高的 XML 编辑器 [JSON 和 XML 编辑器](https://www.altova.com/zh/xmlspy-xml-editor), 用于转换为 XML 格式。

我们首先在 MapForce 中导入输入和输出文件的 XML 模式，然后连接它们的根元素。 在这一步，选择“目标驱动”的连接类型非常重要。 这样可以让我们自定义后续的每个连接。

[![基于目标驱动的元素连接，用于定制化数据映射](/blog/images/data-mapping-1-3.png)](data-mapping-1-3.png)

接下来，我们将“行”元素连接起来，从库中拖入三角函数，并将源数据中的“x值”元素连接到每个函数和输出元素。以下是完成的数据映射：

[![为输入数据生成正弦、余弦和正切值](/blog/images/data-mapping-2-3.png)](data-mapping-2-3.png)

点击位于映射区域下方的“输出”按钮，即可处理输入文件，生成输出结果，并打开预览窗口。

[![输出一个XML文件，其中包含正弦、余弦和正切的值](/blog/images/output-1-1.png)](output-1-1.png)

在这个例子中，输入值从零开始，以十分之一为单位递增到15，输出结果包含每个对应的正弦、余弦和正切值。我们可以保存该文件，然后在XMLSpy中打开它，利用XMLSpy的网格视图，创建高度定制化的图表，甚至可以将图表导出，用于包含在报告或演示文稿中

[![XMLSpy软件以网格视图显示输出文件，并生成相应的图表](/blog/images/sin-cos-graph.png)](sin-cos-graph.png)

**使用 XSLT3 进行数据映射，构建复杂表达式**

您可以将 XSLT3 函数与其他库中的函数结合使用，以构建复杂的表达式。 假设我们想要将一个二次方程，例如 y = 4x² – 3，应用于一系列输入值。 我们可以创建一个映射，将 XSLT3 中的 `pow` 函数（用于计算指数）与其他库中的乘法和加法函数结合起来。

[![使用 XSLT3 构建用于数据映射的二次表达式](/blog/images/quadratic-mapping-1.png)](quadratic-mapping-1.png)

请注意，映射中函数的顺序明确定义了表达式中隐含的处理顺序：首先进行指数运算，然后是乘法，最后是减法。如果表达式使用了括号来改变默认的处理顺序，我们会修改映射中函数的顺序，以设置所需的处理顺序。

也许我们希望对一组输入值进行多次计算，每次使用不同的表达式变体，然后比较结果。我们可以创建一个用户函数来描述这些表达式，并且可以修改输出文件的结构，以便记录生成每个输出文件时使用的指数、乘数和修正因子。

以下是针对由不同表达式生成的每个输出文件的期望结构：

[![期望的二次表达式结果文件的数据结构](/blog/images/result-structure.png)](result-structure.png)

用户函数将从输入 XML 文件读取 x 值，计算表达式，并将函数参数传递给输出，以便进行记录。

[![将二次表达式作为用户自定义函数](/blog/images/user-function-1.png)](user-function-1.png)

以下是完整的映射关系，以及在用户函数中的表达方式：

[![使用用户自定义函数对二次表达式进行数据映射](/blog/images/quadratic-mapping-2.png)](quadratic-mapping-2.png)

 以下是生成的输出文件：

[![使用 XSLT3 对二次表达式进行数据映射的部分视图](/blog/images/output-2-2.png)](output-2-2.png)

用户函数可以轻松地插入到其他映射关系中，或者在多个 MapForce 用户之间共享。我们开始创建用户函数，首先选择定义表达式的函数，然后点击主菜单中的“函数”选项：

[![从现有映射中的组件构建用户自定义函数](/blog/images/build-user.png)](build-user.png)

以下是我们对用户函数的最终定义：

[![使用XSLT3在数据映射中，对二次表达式的用户函数进行定义](/blog/images/user-function-definition-1.png)](user-function-definition-1.png)

如果您的数据映射和集成项目需要使用 XSLT3 的 `fortrigonometry` 函数或其他高级 XSLT3 功能进行数据映射，请了解 MapForce，这是一款屡获殊荣的图形化数据映射工具，适用于各种数据格式之间的转换和集成。您可以下载试用版 [MapForce 免费试用版](https://www.altova.com/zh/mapforce/download) 包括教程、帮助文档以及更多示例！
