---
title: "在 MapForce 中，使用通配符进行 XML 数据映射和转换"
date: "2013-12-17"
categories: 
  - "data-integration"
  - "xml"
tags: 
  - "data-mapping"
  - "mapforce"
  - "xml-schema"
  - "xmlspy"
description: 探索MapForce 2014如何实现XML通配符数据映射和转换，从而能够无缝集成自定义的XML扩展。
---
Status: #blog

Tags:  #data-mapping #mapforce #xml-schema #xmlspy

Categories: [data-integration](/blog/zh/category/data-integration.md) | [xml](/blog/zh/category/xml.md)
# 在 MapForce 中，使用通配符进行 XML 数据映射和转换

[MapForce 2014](https://www.altova.com/zh/mapforce.html) 现在支持映射 XML 通配符，从而为 XML 模式提供一种内置的扩展机制，该机制以 `xs:any` 或 `xs:anyAttribute` 的形式实现。

请考虑以下 XML 片段，该片段在 [XMLSpy](https://www.altova.com/zh/xmlspy.html) 软件中显示如下：

![符合 GPX XML 模式的 XML 文档片段](https://lh6.ggpht.com/-Pu0lWwmXn9U/Uq8slWp5aeI/AAAAAAAABvY/8Mo49sFdmvI/clip_image001%25255B3%25255D.png?imgmax=800 "Fragment of an XML document following the GPX XML Schema")

这段代码片段展示了来自 Garmin GPS 设备记录的两次轨迹点，这些数据来自一个非常长的文件。XML 数据遵循 [GPX XML 模式](http://www.topografix.com/gpx.asp)，同时 Garmin 增加了扩展功能，用于记录速度和航向信息。通过 XML 通配符映射，您可以在 MapForce 中将这些扩展功能映射到其他元素，就像映射 XML 模式中明确定义的元素一样。

假设我们想要读取一个 .gpx 文件，并从中提取出一次旅行过程中记录到的最高速度

![已完成的映射结果](https://lh5.ggpht.com/--tVPorv4xiI/Uq8sl13WPpI/AAAAAAAABvc/a9gkXoF2-D4/clip_image002%25255B5%25255D.png?imgmax=800 "Output of the completed mapping")
<!--更多内容-->

我们可以通过导入一个 .gpx 文件作为输入组件，来开始一个新的 MapForce 映射设计。MapForce 会显示与该 XML 模式中定义的所有元素，这些元素都可以用于映射。下图显示了 XML 模式中与轨迹点相关的部分：

!["trkpt" 元素在 MapForce 映射中显示的子元素](https://lh5.ggpht.com/-5gbBfYhyIU8/Uq8smBoBIlI/AAAAAAAABvk/52Vflk2Ewh0/clip_image003%25255B3%25255D.png?imgmax=800 "Child elements of trkpt displayed in the MapForce mapping")

经度、纬度、海拔高度和时间紧随“trkpt”元素之后，它们定义了XML片段中包含的数据。以下各项，从磁偏角“magvar”到DGPS站的ID“dgpsid”，都是可选的，并且不会出现在Garmin的数据文件中。

该 XML 模式中并未定义速度和路线相关的信息。相反，速度和路线的定义是通过 `xs:any` 元素实现的，该元素位于图像的底部。点击 `xs:any` 元素旁边的图标会打开一个对话框，允许我们导入另一个 XML 模式，该模式定义了扩展内容，并创建一个包装器，用于将原始 XML 模式和扩展内容结合起来。导入完成后，新的元素将显示在源组件中，并且可以进行映射

![映射中显示的扩展元素](https://lh5.ggpht.com/-t-yViZ09FFc/Uq8sm6BuQjI/AAAAAAAABvs/UjuLJ3zTygs/clip_image004%25255B3%25255D.png?imgmax=800 "Extension elements displayed in the mapping")

### 在地图中对数据进行排序

与 MapForce 一起安装的示例文件中，包含一个名为 FindHighestTemperatures.mfd 的映射文件，我们可以将其用作示例，利用排序函数从我们的文件中提取最高速度

![MapForce 会对数据进行排序，并提取最高速度值](https://lh6.ggpht.com/-5roljpZ1gVA/Uq8snIIq-RI/AAAAAAAABvw/71mlatBdiL4/clip_image005%25255B3%25255D.png?imgmax=800 "MapForce sorts and extracts the highest speed value")

这个函数会按照从高到低的顺序对所有速度值进行排序，然后只将排序后的第一个值作为输出。显示的“Z-A”排序方式会自动将数值数据从最高到最低进行排序。

### 在映射中转换数值

最后，我们需要将速度从米/秒转换为英里/小时，将结果四舍五入到小数点后两位，并添加一些描述性文字

![MapForce 将米/秒转换为英里/小时](https://lh3.ggpht.com/-aMdIjCf2hmA/Uq8sndGqSsI/AAAAAAAABv8/ws9-WLt0HhI/clip_image006%25255B3%25255D.png?imgmax=800 "MapForce conversion of meters per second to miles per hour")

上面展示的字符串连接函数的结果将被写入文本文件中，作为输出

![完整数据映射的预览结果](https://lh3.ggpht.com/-PtjzqAx0Pw8/Uq8sn6s4ZcI/AAAAAAAABwE/-bakYlMPqhE/clip_image002%25255B1%25255D%25255B2%25255D.png?imgmax=800 "Output preview of the complete data mapping")

请注意，在函数之间转换时，我们无需显式地将速度（speed）从数值类型转换为字符串类型，MapForce 会自动处理数据类型的转换。以下是完整映射的简化视图，其中标注了主要的操作：

[![MapForce 中 XML 通配符的数据映射](https://lh3.ggpht.com/-xOHuzpDih5Y/Uq8soYR65qI/AAAAAAAABwI/MusDgpCMxj0/clip_image007%25255B4%25255D.png?imgmax=800 "MapForce data mapping of XML wildcards")](https://www.altova.com/images/screenshots/MapForce-XML-wildcard-mapping.PNG)

点击图片或[点击此处](https://www.altova.com/zh/images/screenshots/MapForce-XML-wildcard-mapping.PNG)以查看完整尺寸的图片。

**Altova的网站提供[免费的在线产品培训](https://www.altova.com/zh/aot/online-training.html)，内容涵盖MapForce。您甚至可以[下载MapForce的免费试用版](https://www.altova.com/zh/download-trial.html)，立即开始提升您自身的数据映射和转换技能！**
