2017-02-28 98 views
1

我使用PHP foreach循环解析下面的数据,我需要从measuredValue索引2和索引3中提取数据,但是我不确定如何执行此操作。下面的代码显示了我用来从XML文件中提取数据的内容。我需要在'索引1'中进行温度工作,但我无法弄清楚如何进入下一个'索引'部分。PHP XML解析,多重'索引'问题

foreach ($weather_array->payloadPublication->siteMeasurements as $roaddt){ 

    echo (" 
     <tr> 
      <td> " .$roaddt->measurementSiteReference. "</td> 
      <td> " .$roaddt->measurementTimeDefault. "</td> 
      <td> " .$roaddt->measuredValue->basicDataValue->temperature->airTemperature. "</td> 
      <td> " .$roaddt->measuredValue->basicDataValue->wind->windDirectionCompass. "</td> 
     </tr> "); 
} 
echo "</table>"; 

下面的代码是什么,我想从拉部分:

<siteMeasurements> 
    <measurementSiteReference>NRA10810</measurementSiteReference> 
    <measurementTimeDefault>2017-02-28T15:50:00+00:00</measurementTimeDefault> 
    <measuredValue index="1"> 
    <basicDataValue xsi:type="TemperatureInformation"> 
    <period>3600</period> 
    <temperature>...</temperature> 
    </basicDataValue> 
    </measuredValue> 
    <measuredValue index="2"> 
    <basicDataValue xsi:type="PrecipitationInformation"> 
    <period>3600</period> 
    <precipitationDetail></precipitationDetail> 
    </basicDataValue> 
    </measuredValue> 
    <measuredValue index="3"> 
    <basicDataValue xsi:type="WindInformation"> 
    <period>3600</period> 
    <wind> 
    <maximumWindSpeed>45</maximumWindSpeed> 
    <windDirectionBearing>302</windDirectionBearing> 
    <windDirectionCompass>westNorthWest</windDirectionCompass> 
    <windSpeed>27.4</windSpeed> 
    </wind> 
    </basicDataValue> 
    </measuredValue> 
+0

如何读取XML(即如何分配$ weather_array)? –

回答

1

你只环路上siteMeasurements,但每个siteMeasurements有多个measuredValue
因此,在您现有的循环中,您需要在measuredValue上添加另一个循环。类似的东西:

foreach ($weather_array->payloadPublication->siteMeasurements as $roaddt){ 
    echo (" 
     <tr> 
      <td> " .$roaddt->measurementSiteReference. "</td> 
      <td> " .$roaddt->measurementTimeDefault. "</td>"); 
    foreach ($roaddt->measuredValue as $mValue){ 
    echo ("<td> " .$mValue->basicDataValue. "</td>");    
    } 
    echo ("</tr>"); 
}