Då är det XPath du ska använda.
$xml = simplexml_load_file("http://www.domän.se/fil.xml");
$result = $xml->xpath("/meteohub/data/item[@cat='min']");
var_dump($result);
4 svar · 539 visningar · startad av lejzer
Hej,
Har lite problem med att försöka läsa ut information från en XML-fil. Jag läser in filen på följande sätt, men vet inte riktigt hur jag ska skriva för att få en post från xml-filen. Jag vill inte loopa ut informationen, utan bara ha en specifik post.
Så här läser jag in filen:
$filename = 'http://domän.se/fil.xml';
$xml = simplexml_load_file($filename);
echo $xml = men sen?
Exempel från XML-filen nedan:
<meteohub>
<config>
</config>
<data timeframe="actual">
<item sensor="date0" cat="date" unit="utc">20100818185152</item>
<item sensor="date0" cat="date2" unit="utc">18.08.2010 18:51:52</item>
<item sensor="date0" cat="puredate" unit="utc">18.08.2010</item>
<item sensor="date0" cat="time" unit="utc">18:51:52</item>
<item sensor="date0" cat="year" unit="utc">2010</item>
<item sensor="date0" cat="month" unit="utc">08</item>
<item sensor="date0" cat="day" unit="utc">18</item>
<item sensor="date0" cat="dayofweek" unit="utc">3</item>
<item sensor="date0" cat="hour" unit="utc">18</item>
<item sensor="date0" cat="min" unit="utc">51</item>
<item sensor="date0" cat="sec" unit="utc">52</item>
<item sensor="date0" cat="date" unit="local">20100818205152</item>
<item sensor="date0" cat="date2" unit="local">18.08.2010 20:51:52</item>
<item sensor="date0" cat="puredate" unit="local">18.08.2010</item>
<item sensor="date0" cat="time" unit="local">20:51:52</item>
<item sensor="date0" cat="year" unit="local">2010</item>
JAg vill exempelvis ha ut info från följande rad:
<item sensor="date0" cat="min"
Tacksam för hjälp.
Mvh
Martin
Då är det XPath du ska använda.
$xml = simplexml_load_file("http://www.domän.se/fil.xml");
$result = $xml->xpath("/meteohub/data/item[@cat='min']");
var_dump($result);
Tack för snabbt svar. Dessvärre fick jag inte ut något värde. Kan tillägga att XML:en ser ut så här fortsättningsvis:
<meteohub>
<config>
</config>
<data timeframe="actual">
<item sensor="date0" cat="date" unit="utc">20100818185152</item>
<item sensor="date0" cat="date2" unit="utc">18.08.2010 18:51:52</item>
</data>
<data timeframe="alltime">
<item sensor="date0" cat="date" unit="utc">20100818024935</item>
<item sensor="date0" cat="date" unit="local">20100818044935</item>
<item sensor="rain0" cat="rate" unit="mm">0.1</item>
<item sensor="rain0" cat="rate" unit="in">0.01</item>
Jag vill alltså få ut värdet 20100818185152 från date0->date (actual)
Samt 20100818024935 från date0->date (alltime)
Bör inte xpath:en ha med 'actual' eller 'alltime' för att hitta rätt? Hur ser det ut isåfall?
Tack på förhand.
Jo, man måste specificera djupet - men det framgick inte av din ursprungliga struktur!
$xml = simplexml_load_file("http://www.domän.se/fil.xml");
$result_1 = $xml->xpath("/meteohub/data[@timeframe='actual']/item[@sensor='date0' and @cat='min' and @unit='utc']");
$result_2 = $xml->xpath("/meteohub/data[@timeframe='alltime']/item[@sensor='date0' and @cat='date' and @unit='utc']");
...
Borde fungera. Om inte operatorn 'and' fungerar, försök med '&' istället - jag är osäker på hur väl SimpleXML hanterar/klarar av dessa XPath-uttryck.
Dessvärre fick jag aldrig det att fungera. Valde till slut att skapa en helt ny XML med de värde jag ville få ut för att göra processen enklare.
Tack ändå!