webForumDet fria alternativet

Hjälp med simplexml och PHP

4 svar · 537 visningar · startad av lejzer

lejzerMedlem sedan juni 2002263 inlägg
#1

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 20007 896 inlägg
#2

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
#3

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 20007 896 inlägg
#4

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
#5

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å!

129 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)