---
title: "XPath 增强了 XML 报表的功能"
date: "2012-04-17"
categories: 
  - "xpath"
tags: 
  - "charts"
  - "localization"
  - "stylevision"
  - "xpath"
description: 了解如何使用 Altova StyleVision 中的 XPath 来增强 GPS XML 报告。学习如何计算数值、格式化日期以及有效地自定义图表。
---
Status: #blog

Tags:  #charts #localization #stylevision #xpath

Categories: [xpath+xquery](/blog/zh/category/xpathxquery.md)
# XPath 增强了 XML 报表的功能

在我们的上一篇文章中， [为GPS XML数据创建优雅的报告](https://www.altova.com/blog/2012/04/creating-elegant-reports-for-gps-xml.html) 我们使用 XPath 表达式从 XML 文档中选择节点，用于生成高程线图。您也可以使用 XPath 来计算数值。 [Altova StyleVision 产品](https://www.altova.com/zh/stylevision.html) 它提供了强大的 XPath 支持，我们可以使用 XPath 表达式为我们的 GPS XML 报告添加有趣的信息。例如，我们可以处理 GPS 设备存储的以米为单位的海拔数据，并将其转换为英尺，从而生成一张显示海拔高度（相对于海平面）的图表。

![Altova StyleVision 折线图](https://lh5.ggpht.com/-gSbmsmf1ZRY/T6FNDIQzqkI/AAAAAAAAAyg/1u_NWXO1IlM/clip_image001%25255B1%25255D.png?imgmax=800 "Altova StyleVision line chart")

<!--more-->

将米转换为英尺的换算公式是：(米数 x 3.2808399) = 英尺数。 我们可以将此计算应用于“图表配置”对话框中

现在，我们将使用从源文件中提取的数据进行计算的结果来绘制图表。

**XPath 时间函数**

您可能已经注意到，我们的图表没有包含X轴刻度的定义。我们刻意省略了X轴上的刻度和数值，因为GPS设备每隔几秒钟都会记录一次轨迹点信息。对于这次冰川攀登的记录文件，包含了超过1800个海拔数据点，如此庞大的数据量导致刻度密集到几乎变成了一条实线！而且，图中也没有足够的空间来显示数值标签。

但是，了解这次徒步用了多长时间会很有趣。我们可以利用StyleVision的自动计算功能，将这个信息添加到我们的报告中。下图展示了三个通过“插入/自动计算/数值”菜单选项添加到报告中的自动计算元素，并添加了描述性文字。

![StyleVision 自定义计算元素](https://lh5.ggpht.com/-uXZIbSXcnbw/T41tCgrdCqI/AAAAAAAAAys/4EJATOgpRFI/clip_image003%25255B1%25255D.png?imgmax=800 "StyleVision AutoCalc elements")

右键单击任何“自动计算”元素，会弹出一个菜单，该菜单提供访问“编辑 XPath”对话框的入口，如图所示（已缩小显示）。您可以在窗口中直接输入 XPath 表达式，或者通过从“元素”、“运算符”和“函数”列表中选择来构建 XPath 表达式。

为了计算行程所花费的时间，我们可以使用 XPath 函数 `time` 和 `min(anyAtomicType)`，并结合 XPath 表达式来处理...（此处省略具体内容，因为原文不完整） `time` 对于每个轨迹点，我们需要找到该轨迹记录的最早时间和最晚时间。我们可以通过从最晚时间中减去最早时间来计算经过的时间。

![StyleVision XPath 编辑对话框](https://lh4.ggpht.com/-6far6GBn_X0/T41tDmS8KpI/AAAAAAAAAyw/y3OtXvCrqRc/clip_image004%25255B1%25255D.png?imgmax=800 "StyleVision XPath edit dialog")

另一个在“自动计算”右键菜单中的选项会打开“数值格式”对话框，方便用户快速访问各种适用于计算结果数据类型的格式。

![AutoCalc 结果的“样式设置”对话框](https://lh6.ggpht.com/-kH8H4z9bW6Q/T41tEVMLc7I/AAAAAAAAAy0/NaG1nrLMQZY/clip_image005%25255B1%25255D.png?imgmax=800 "StyleVision Value Formatting dialog for AutoCalc result")

我们也可以使用 min() 和 max() 函数来选择出发时间和到达时间，但GPS设备存储的数据是格林威治标准时间（GMT），而这次徒步活动在美国东部标准时间（Eastern Standard Time）进行，该地区的时间比格林威治时间早五个小时。

幸运的是，XPath 包含一个特殊的函数 `adjust-dateTime-to-timezone()`，用于将日期时间值调整到不同的时区。以下是我们在调整出发时间时使用的表达式：

**将最小值（从 `$XML/n1:gpx/n1:trk/n1:trkseg/n1:trkpt/n1:time` 中提取）的时间调整为指定时区，并减去 5 小时**

请注意，我们必须将调整时长以字符串的形式输入，并且明确将其声明为 `dayTimeDuration` 数据类型。

我们可以使用“数值格式”对话框，将出发时间和到达时间以一种常见的格式呈现出来：

![对日期时间结果进行格式化处理](https://lh5.ggpht.com/-iRof_1PEOr0/T41tFgbR_oI/AAAAAAAAAy4/0x1-QSpyFIE/clip_image006%25255B1%25255D.png?imgmax=800 "Value Formatting a dateTime result")

我们对 GPS XML 报告的 XPath 功能又进行了一项改进。在我们的[之前的一篇文章](https://www.altova.com/blog/2012/04/creating-elegant-reports-for-gps-xml.html)中，我们描述了一种使用 StyleVision 项目和标准化的文件名来生成多个数据文件的报告，而无需修改 SPS 文件。您还可以使用 StyleVisionBatch 工具，甚至使用 StyleVision API，通过 SPS 样式表自动处理，从而创建各种格式的报告。

**图表文件名**

当我们生成并保存HTML输出时，主报告是一个HTML文档，而图表是单独的图像文件。我们可以在“图表设置”对话框中指定图表的文件名，但如果要在服务器上同一个文件夹中保存多个HTML报告，那么每个图表都需要使用不同的文件名。否则，每个新的图表都会使用默认名称，从而覆盖之前的版本。

![StyleVision 图表文件名称对话框](https://lh6.ggpht.com/-AgmhHehVq4Q/T41tGeEH85I/AAAAAAAAAy8/58M0UkyBBgs/clip_image007%25255B1%25255D.png?imgmax=800 "StyleVision chart file name dialog")

“自定义文件名”选项允许我们使用 XPath 表达式来指定不同的图像文件名。一个简单的解决方案可能是生成一个随机数，将其转换为字符串，然后将该字符串插入到文件名中。

但是，我们无法做到这一点，因为XPath中没有提供一个名为`random()`的函数。

我们可以通过组合两个额外的 XPath 时间函数来生成一个伪随机字符串。`seconds-from-time()` 函数可以从任何时间值中提取秒数和毫秒数，而 `current-time()` 函数则返回当前系统的时间，包括小时、分钟、秒和毫秒。

我们可以在图像文件设置对话框中的 XPath 表达式中，使用 `seconds-from-time(current-time())` 函数，从而根据生成 HTML 结果的确切秒数和毫秒数来生成文件名。完整的 XPath 表达式，用于生成文件名字符串，如下所示：

![根据 XPath 表达式自定义图表的文件名](https://lh3.ggpht.com/-eKYGKDgTE3Y/T41tG5rSf_I/AAAAAAAAAzA/mfzA2xHPfCs/clip_image008%25255B1%25255D.png?imgmax=800 "Custom chart file name based on an XPath expression")

当我们保存生成的HTML输出时，StyleVision会报告与主文档一起创建的所有其他文件

![基于 XPath 表达式生成的伪随机文件名](https://lh5.ggpht.com/-lFtknXRCRx0/T41tHYy-d4I/AAAAAAAAAzE/rXLms4KlLFE/clip_image009%25255B1%25255D.png?imgmax=800 "Pseudo-random file name generated based on XPath expression")

**路线地图的图像文件名**

当我们为旅行报告创建多个HTML页面时，我们也需要为每段行程引用不同的路线地图图片。XPath 也可以帮助完成这项任务。最初，我们使用特定的文件名URL来插入地图，但我们可以将图像文件名定义为一个参数，并在处理样式表时传递该参数。

“编辑/样式表参数”菜单选项会打开“编辑参数”对话框，该对话框提供了一个集中访问所有样式表参数的界面。在下面的截图所示，我们添加了一个名为“routeMapFile”的参数，并为其定义了默认值。

![StyleVision 编辑参数窗口](https://lh4.ggpht.com/-RNgIJCRUynk/T41tJ9qjtbI/AAAAAAAAAzI/xRMtQEP7KUs/clip_image010%25255B1%25255D.png?imgmax=800 "StyleVision Edit Parameters window")

现在，我们可以使用该参数来指定路由映射文件。“编辑图像”对话框包含四个选项，用于定义图像的位置。在下面的截图中，我们选择了“静态”和“动态”选项卡，用于指定一个特定的文件夹路径和一个动态文件名。

![为图像文件名指定参数](https://lh4.ggpht.com/-Fpvq94Ozbhw/T41tKTSpdvI/AAAAAAAAAzM/4niINvq5I7U/clip_image011%25255B1%25255D.png?imgmax=800 "Assigning a parameter to an image file name")

在生成报告时，我们可以为 "routeMapFile" 参数指定一个新的值，无论报告的输出格式是什么。 如果我们不指定新的值，则会使用“编辑参数”对话框中定义的默认值。

现在，我们可以编写一个命令行，以批量模式运行 StyleVision，并使用不同的路线图图像

![执行 StyleVision 批量模式的命令行，并带有一个参数](https://lh6.ggpht.com/-9pYl5bC12Bs/T41tLKn4VnI/AAAAAAAAAzQ/ByarXQ-ZdcE/clip_image012%25255B1%25255D.png?imgmax=800 "Command line to execute StyleVision in batch mode with a parameter")

我们还可以使用一个参数来设置图表的背景颜色。 此外，还有一个命令行选项，可以用来选择一个新的输入XML文件，从而替换样式表中定义的当前XML文件。 通过使用参数和命令行选项，StyleVisionBatch 成为一种非常好的方法，可以利用同一个样式表来生成针对大量不同数据集的报告。

以下是冰上攀登旅行数据的HTML预览，其中已应用了我们所有的XPath增强功能：

![带有 XPath 增强功能的报告 HTML 预览](https://lh5.ggpht.com/--MSr3CqE-Uo/T41tLuthPCI/AAAAAAAAAzU/RyC_Ff9hN6M/clip_image014%25255B1%25255D.jpg?imgmax=800 "HTML preview of the report with XPath enhancements")

要根据GPS XML文件设计您自己的报告，或者优雅地实现任何其他XML报告、电子表格或多渠道发布需求，[请点击此处免费试用Altova StyleVision](https://www.altova.com/zh/download/stylevision/db_xslt_stylesheet_designer_enterprise.html)
