XPath 增强了 XML 报表的功能

在我们的上一篇文章中, 为GPS XML数据创建优雅的报告 我们使用 XPath 表达式从 XML 文档中选择节点,用于生成高程线图。您也可以使用 XPath 来计算数值。 Altova StyleVision 产品 它提供了强大的 XPath 支持,我们可以使用 XPath 表达式为我们的 GPS XML 报告添加有趣的信息。例如,我们可以处理 GPS 设备存储的以米为单位的海拔数据,并将其转换为英尺,从而生成一张显示海拔高度(相对于海平面)的图表。

将米转换为英尺的换算公式是:(米数 x 3.2808399) = 英尺数。 我们可以将此计算应用于“图表配置”对话框中

现在,我们将使用从源文件中提取的数据进行计算的结果来绘制图表。

XPath 时间函数

您可能已经注意到,我们的图表没有包含X轴刻度的定义。我们刻意省略了X轴上的刻度和数值,因为GPS设备每隔几秒钟都会记录一次轨迹点信息。对于这次冰川攀登的记录文件,包含了超过1800个海拔数据点,如此庞大的数据量导致刻度密集到几乎变成了一条实线!而且,图中也没有足够的空间来显示数值标签。

但是,了解这次徒步用了多长时间会很有趣。我们可以利用StyleVision的自动计算功能,将这个信息添加到我们的报告中。下图展示了三个通过“插入/自动计算/数值”菜单选项添加到报告中的自动计算元素,并添加了描述性文字。

右键单击任何“自动计算”元素,会弹出一个菜单,该菜单提供访问“编辑 XPath”对话框的入口,如图所示(已缩小显示)。您可以在窗口中直接输入 XPath 表达式,或者通过从“元素”、“运算符”和“函数”列表中选择来构建 XPath 表达式。

为了计算行程所花费的时间,我们可以使用 XPath 函数 timemin(anyAtomicType),并结合 XPath 表达式来处理...(此处省略具体内容,因为原文不完整) time 对于每个轨迹点,我们需要找到该轨迹记录的最早时间和最晚时间。我们可以通过从最晚时间中减去最早时间来计算经过的时间。

另一个在“自动计算”右键菜单中的选项会打开“数值格式”对话框,方便用户快速访问各种适用于计算结果数据类型的格式。

我们也可以使用 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 数据类型。

我们可以使用“数值格式”对话框,将出发时间和到达时间以一种常见的格式呈现出来:

我们对 GPS XML 报告的 XPath 功能又进行了一项改进。在我们的之前的一篇文章中,我们描述了一种使用 StyleVision 项目和标准化的文件名来生成多个数据文件的报告,而无需修改 SPS 文件。您还可以使用 StyleVisionBatch 工具,甚至使用 StyleVision API,通过 SPS 样式表自动处理,从而创建各种格式的报告。

图表文件名

当我们生成并保存HTML输出时,主报告是一个HTML文档,而图表是单独的图像文件。我们可以在“图表设置”对话框中指定图表的文件名,但如果要在服务器上同一个文件夹中保存多个HTML报告,那么每个图表都需要使用不同的文件名。否则,每个新的图表都会使用默认名称,从而覆盖之前的版本。

“自定义文件名”选项允许我们使用 XPath 表达式来指定不同的图像文件名。一个简单的解决方案可能是生成一个随机数,将其转换为字符串,然后将该字符串插入到文件名中。

但是,我们无法做到这一点,因为XPath中没有提供一个名为random()的函数。

我们可以通过组合两个额外的 XPath 时间函数来生成一个伪随机字符串。seconds-from-time() 函数可以从任何时间值中提取秒数和毫秒数,而 current-time() 函数则返回当前系统的时间,包括小时、分钟、秒和毫秒。

我们可以在图像文件设置对话框中的 XPath 表达式中,使用 seconds-from-time(current-time()) 函数,从而根据生成 HTML 结果的确切秒数和毫秒数来生成文件名。完整的 XPath 表达式,用于生成文件名字符串,如下所示:

当我们保存生成的HTML输出时,StyleVision会报告与主文档一起创建的所有其他文件

路线地图的图像文件名

当我们为旅行报告创建多个HTML页面时,我们也需要为每段行程引用不同的路线地图图片。XPath 也可以帮助完成这项任务。最初,我们使用特定的文件名URL来插入地图,但我们可以将图像文件名定义为一个参数,并在处理样式表时传递该参数。

“编辑/样式表参数”菜单选项会打开“编辑参数”对话框,该对话框提供了一个集中访问所有样式表参数的界面。在下面的截图所示,我们添加了一个名为“routeMapFile”的参数,并为其定义了默认值。

现在,我们可以使用该参数来指定路由映射文件。“编辑图像”对话框包含四个选项,用于定义图像的位置。在下面的截图中,我们选择了“静态”和“动态”选项卡,用于指定一个特定的文件夹路径和一个动态文件名。

在生成报告时,我们可以为 "routeMapFile" 参数指定一个新的值,无论报告的输出格式是什么。 如果我们不指定新的值,则会使用“编辑参数”对话框中定义的默认值。

现在,我们可以编写一个命令行,以批量模式运行 StyleVision,并使用不同的路线图图像

我们还可以使用一个参数来设置图表的背景颜色。 此外,还有一个命令行选项,可以用来选择一个新的输入XML文件,从而替换样式表中定义的当前XML文件。 通过使用参数和命令行选项,StyleVisionBatch 成为一种非常好的方法,可以利用同一个样式表来生成针对大量不同数据集的报告。

以下是冰上攀登旅行数据的HTML预览,其中已应用了我们所有的XPath增强功能:

要根据GPS XML文件设计您自己的报告,或者优雅地实现任何其他XML报告、电子表格或多渠道发布需求,请点击此处免费试用Altova StyleVision