【发布时间】:2017-12-28 01:50:16
【问题描述】:
我正在生成一个从 XML 文件中提取信息的报告。
<?xml version="1.0" encoding="UTF-8"?>
<JoinedRoot>
<FlexoPlateReport>
<Device>A</Device>
</FlexoPlateReport>
<FlexoPlateReport>
<Device>B</Device>
</FlexoPlateReport>
<FlexoPlateReport>
<Device>A</Device>
</FlexoPlateReport>
<FlexoPlateReport>
<Device>C</Device>
</FlexoPlateReport>
<FlexoPlateReport>
<Device>C</Device>
</FlexoPlateReport>
<FlexoPlateReport>
<Device>B</Device>
</FlexoPlateReport>
<FlexoPlateReport>
<Device>A</Device>
</FlexoPlateReport>
</JoinedRoot>
基本上,到目前为止,我所做的是将列出不同设备的 XPath 表达式放在一起。上面的 XML 中有三个设备(A、B 和 C)。下面是 XPath 表达式。
/JoinedRoot/FlexoPlateReport[not( Device/text()=preceding-sibling::FlexoPlateReport/Device/text())]/Device/text()
我仅限于 XPath 1.0,否则我会使用 distinct-values() 函数。接下来我想做的是返回第一个 XPath 表达式中列出的每个设备的计数。例如,上面的 XML 会给我以下计数:
答:3
乙:2
C: 2
是否可以在一个表达式中同时返回名称和计数?如果没有,是否有一个 XPath 表达式将只返回每个不同设备的计数。我永远不会知道报告中有多少不同的设备或设备元素的值是什么。因此,我不能简单地为特定设备名称编写 count() 函数。
提前致谢!
【问题讨论】:
-
您在什么环境中运行此 XPath 1.0?
-
@ThomasW,我将在 Esko 的自动化引擎中将其用作 SmartName。
-
我只快速浏览了文档,但在我看来您可以使用 Script SmartName。不确定 Esko 的 JavaScript 引擎是否支持 XPath 查询,但您始终可以使用 JavaScript 本身迭代文档。
标签: xml xpath count distinct-values xpath-1.0