我正在生成一个从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 Expression放在一起,列出不同的设备。上面的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
B:2
C:2
是否可以在单个表达式中返回名称和计数?如果没有,是否有一个XPath表达式只返回每个不同设备的计数。我永远不会知道报告中有多少不同的设备或者Device元素的值是什么。因此,我不能简单地为特定设备名称编写count()函数。
提前致谢!
答案 0 :(得分:1)
如果您被限制在XPath 1.0中,单个查询就无法做到这一点。你需要一个双程过程。如果您以编程方式进行这些查询,请使用相应的编程语言(XSLT,PHP,JavaScript)根据第一个查询的结果触发计数查询。
count(/JoinedRoot/FlexoPlateReport/Device[.='A'])