Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xpath和;php_Php_Xml_Api_Xpath - Fatal编程技术网

使用xpath和;php

使用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 ]]> <

因此,我的XML文档如下所示:

<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);


}