使用xpath和;php
因此,我的XML文档如下所示:使用xpath和;php,php,xml,api,xpath,Php,Xml,Api,Xpath,因此,我的XML文档如下所示: <output> <workouts> <workout> <workout_date> <![CDATA[ 2014-04-05 ]]> </workout_date> <distance> <![CDATA[ 15 ]]> <
<output>
<workouts>
<workout>
<workout_date>
<![CDATA[ 2014-04-05 ]]>
</workout_date>
<distance>
<![CDATA[ 15 ]]>
</distance>
</workout>
<workout>
<workout_date>
<![CDATA[ 2014-04-08 ]]>
</workout_date>
<distance>
<![CDATA[ 2 ]]>
</distance>
</workout>
<workout>
<workout_date>
<![CDATA[ 2014-03-28 ]]>
</workout_date>
<distance>
<![CDATA[ 3.3 ]]>
</distance>
</workout>
</workouts>
</output>
这将只输出唯一的值,因此我不会每月重复,但是,我无法输出每个月的所有“距离”
值之和。因此,从本质上讲,最终结果将如下所示:
<output>
<workouts>
<workout>
<workout_date>
<![CDATA[ 2014-04-05 ]]>
</workout_date>
<distance>
<![CDATA[ 15 ]]>
</distance>
</workout>
<workout>
<workout_date>
<![CDATA[ 2014-04-08 ]]>
</workout_date>
<distance>
<![CDATA[ 2 ]]>
</distance>
</workout>
<workout>
<workout_date>
<![CDATA[ 2014-03-28 ]]>
</workout_date>
<distance>
<![CDATA[ 3.3 ]]>
</distance>
</workout>
</workouts>
</output>
结果:
四月
总距离=17
行军
总距离=3.3
等等
我不确定PHP是否提供了XPath/XQuery 3支持,但如果提供了,您可以使用此表达式实现所需的功能:
for $workout in /output/workouts/workout
let $date := xs:date($workout/workout_date)
let $month := month-from-date($date)
let $year := year-from-date($date)
group by $year, $month
return
let $padded-month := substring(concat('0', $month), string-length(string($month)))
let $month-year := format-date(xs:date(string-join((string($year), $padded-month, '01'), "-")), "[MNn] [Y]")
return
($month-year, sum($workout/distance))
我能用这种逻辑把他们分组。现在只需要从数组中添加距离值
$distanceforDate = array();
foreach ($typesList as $type) {
$Data = $xml->xpath('output/workouts/workout[workout_date="' . $type . '"]');
$M = date('F', strtotime($type));
if (!empty($Data)) {
foreach ($Data as $rawData) {
//print_r ($M);
$distanceforDate[$M][] = '' . $rawData->distance;
}
}
}
print_r($distanceforDate);
echo array_sum($distanceforDate);
}