Są dwa sposoby. Pierwszym jest iteracja przez całość aż do napotkania pierwszego takiego wyniku, który posiada wartości:
<City>Kraków, ul. Bujaka</City>
<Pollutant>PM10</Pollutant>
Ten wynik łapiemy, przerywamy pętlę i wypisujemy.
Twój kod na "mój" sposób:
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.malopolska.pl/_layouts/WrotaMalopolski/XmlData.aspx?data=2');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$dane = curl_exec($curl);
curl_close($curl);
$Current = new SimpleXMLElement($dane);
foreach($Current->Item as $item) {
if ($item->City == "Kraków, ul. Bujaka" && $item->Pollutant == "PM10") {
$data = $item;
break; //przerywamy pętlę, bo już mamy to, co chcemy - dalsze wyniki są starsze, a więc zbędne
}
}
echo" Wynik= " .$data->Value; echo " ".$data->Pollutant;
Drugim sposobem jest wykorzystanie xpath - wtedy jednak też musimy zrobić pętlę. To rozwiązanie wydaje mi się nieco szybsze (nie iterujemy przez całego XML-a, tylko przez to, co daje nam xpath, przez co foreach ma "mniej roboty"):
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.malopolska.pl/_layouts/WrotaMalopolski/XmlData.aspx?data=2');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$dane = curl_exec($curl);
curl_close($curl);
$Current = new SimpleXMLElement($dane);
$nodes = $Current->xpath('//Current/Item/City[.="Kraków, ul. Bujaka"]/parent::*'); //do tablicy $nodes łapiemy wszystko, co ma "Kraków, Ul. Bujaka" jako City
foreach($nodes as $item) {
if ($item->Pollutant == "PM10") { //tutaj nie musimy już sprawdzać, czy City to "Bujaka", bo już to wiemy - xpath zwrócił tylko takie
$data = $item;
break;
}
}
echo" Wynik= " .$data->Value; echo " ".$data->Pollutant;
Wszystko będzie śmigać prawidłowo, dopóki wyniki w XML-u będą posortowane od najnowszego do najstarszego. Jeśli to też będzie się zmieniać, to trzeba będzie dopisać fragment kodu, w którym będziesz eliminować starsze wyniki.