我想返回每个计划的 L1 和 L0 项目的数量以及每个计划的警告数量。
这实际上是一种“如果”的情况。
我尝试了以下 XQuery,它可以很好地计算 L1、L0 和警告,但确实计算所有警告而不是仅计算带有value = "yes"
.
xquery version "3.0";
let $nl := " "
let $quote := """
let $pipe := "|"
let $nodecount := 0
for $profiles in doc("maik test.xml")/PROFILE
for $schedule in $profiles/SCHEDULE
let $schedulename := $schedule/@name
group by $schedulename
return ($nl,
$schedulename, $pipe, "L0 count:", count($schedule/L0),
$pipe, "L0 Warnings:", count($schedule/L0/ATTRIBUTE[@NAME = "Warnings"]/VALUE/string() = "Yes"),
$pipe, "L1 count:", count($schedule/L0/L1),
$pipe, "L1 Warnings:", count($schedule/L0/L1/ATTRIBUTE[@NAME = "Warnings"]/VALUE/string() = "Yes"))
示例 XML:
<?xml version="1.0" encoding="UTF-8"?>
<PROFILE name="profile1">
<SCHEDULE name="schedule1">
<L0>
<ATTRIBUTE NAME="Warnings">
<VALUE>No</VALUE>
</ATTRIBUTE>
<L1>
<ATTRIBUTE NAME="Warnings">
<VALUE>No</VALUE>
</ATTRIBUTE>
</L1>
<L1>
<ATTRIBUTE NAME="Warnings">
<VALUE>No</VALUE>
</ATTRIBUTE>
</L1>
<L1>
<ATTRIBUTE NAME="Warnings">
<VALUE>Yes</VALUE>
</ATTRIBUTE>
</L1>
<L1></L1>
</L0>
<L0>
<ATTRIBUTE NAME="Warnings">
<VALUE>No</VALUE>
</ATTRIBUTE>
<L1></L1>
</L0>
</SCHEDULE>
<SCHEDULE name="schedule2">
<L0>
<L1></L1>
<L1></L1>
<L1></L1>
<L1></L1>
</L0>
<L0>
<L1></L1>
</L0>
<L0>
<L1></L1>
<L1></L1>
<L1></L1>
</L0>
</SCHEDULE>
</PROFILE>