lejzerMedlem sedan juni 2002263 inlägg
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
SPiNMedlem sedan mars 20005 832 inlägg
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);
lejzerMedlem sedan juni 2002263 inlägg
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.
SPiNMedlem sedan mars 20005 832 inlägg
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.
lejzerMedlem sedan juni 2002263 inlägg
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å!