PHP en xml

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al een tijdje bezig met een scrip om het uitlezen van een xml van xml.buienradar.nl
het lukt heel aardig, maar ik stuit op een regel waar ik niet uit kom.

$station = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->stationnaam;

Deze geeft als output Meetstation Maastricht

$nr haal ik uit die ik zelf gegenereerd heb uit alle weerstations waar Meetstation Maastricht wordt aangegeven.

Maar nu heb ik de volgende regel. Dat is :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- <buienradarnl>
- <weergegevens>
  <titel>www.buienradar.nl - actuele weersinformatie</titel> 
  <link>http://www.buienradar.nl</link> 
  <omschrijving>XML feed weersinformatie</omschrijving> 
  <language>nl-nl</language> 
  <copyright>(C)opyright 2005 - 2009 Buienradar B.V. Alle rechten voorbehouden</copyright> 
  <gebruik>Deze XML feed mag vrij worden gebruikt onder voorwaarde van bronvermelding BuienRadar.NL inclusief een hyperlink naar http://www.buienradar.nl. Aan de feed kunnen door gebruikers of andere personen geen rechten worden ontleend.</gebruik> 
- <image>
  <titel>Buienradar.nl</titel> 
  <link>http://www.buienradar.nl/</link> 
  <url>http://www.buienradar.nl/include/images/header.jpg</url> 
  <width>950</width> 
  <height>78</height> 
  </image>
- <actueel_weer>
- <weerstations>
- <weerstation id="6380">
[b]<icoonactueel zin="bewolkt" ID="pp">http://xml.buienradar.nl/icons/pp.gif</icoonactueel> [/b]


Als ik dan het volgende icoonactueel opvraag met de volgende regel:

$weer = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel;

dan krijg ik uit die regel als output : http://xml.buienradar.nl/icons/pp.gif

Maar ik wil graag het ID als output hebben.. nu heb ik de volgende regels al geprobeerd maar krijg ik er niks uit

$weer = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel[0];
$weer = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel[1];
$weer = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel[2];
$weer = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel[id];

Moet ik dit op een andere manier opgeven om die ID als ouput?? want hij laat het gene alleen zien dat tussen de > en < staat.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Staat het niet gewoon in de handleiding van PHP?

Zoiets: http://nl2.php.net/manual...ml-element-attributes.php

Overigens, je gebruikt hier toch SimpleXML? Dat is sowieso wel handig om eerst even aan te geven.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik neem aan dat je gebruik maakt van SimpleXML? Dan heb je neem ik aan ook deze pagina ook wel gezien? :)
offtopic:
Aarg Noork :(

[ Voor 5% gewijzigd door mithras op 20-01-2009 19:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja ik gebruik inderdaad simplexml sorry dat ik dat niet erbij had vermeld. wilde de code ernog aan toevoegen.. staat er inderdaad bij heb ik gezien via jullie link. maar zou niet weten hoe je dat moet uitwerken in praktijk. ben nog maar een begin phper..

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Wat heb je geprobeerd dan? Onderstaande kun je niet omzetten voor jouw situatie?

zie dit:
PHP:
1
<?php $element->attributes()->attrname; ?>

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
De functie attributes haalt alle attributen van een element op in associatieve vorm. Je kan dus met de volgende xml aan de gang:
code:
1
2
3
4
5
6
<xml>
  <childs>
    <child id="1" name="jan"/>
    <child id="2" name="piet"/>
  </childs>
</xml>
Met de volgende php code krijg je de eerste naam en id:
PHP:
1
2
$attr = $xml->childs->child[0]->attributes();
print_r( $attr );

Je krijg dan iets als volgt:
code:
1
2
3
Array:
 "id" => "1",
 "name => "jan"

In jouw voorbeeld kan je alle attributen van icoonactueel opvragen:
PHP:
1
2
$attributes = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel->attributes();
$icoon = $attributes['ID']; //waarde pp

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik ga een ermee testen, moet nu helaas gaan morgen horen jullie of ik er uit ben gekomen. tnx voor jullie hulp en voorbeelden..

Acties:
  • 0 Henk 'm!

  • remcotolsma
  • Registratie: December 2005
  • Laatst online: 08-09 11:11
(jarig!)
Handig dat Buienradar deze gegevens in XML formaat beschikbaar stellen. SimpleXML is ideaal voor het verwerken van deze data. Ik zie dat iedereen verwijst naar de [url="http:/php.net/function.simplexml-element-attributes"]attributes functie[/url]. Je kunt een element ook benaderen als array om de attributen op te vragen, dat is wel zo gemakkelijk.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$dataUrl = 'http://xml.buienradar.nl/';
$data = simplexml_load_file($dataUrl);

if($data !== false) {
    $weatherStation = current($data->xpath('//actueel_weer/weerstations/weerstation[@id="6380"]'));

    if($weatherStation !== false) {
        echo $weatherStation->icoonactueel['ID'];
    }
}

?>

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Ik heb daar ook een keer een script voor gemaakt (vereenvoudigd):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$url = "http://xml.buienradar.nl";
$xml = simplexml_load_file($url);

echo $xml->weergegevens;
echo "<a href='".$xml->weergegevens->image->link."'>";
echo "<img src='".$xml->weergegevens->image->url."'></a>";

echo $xml->weergegevens->verwachting_vandaag->samenvatting;
echo $xml->weergegevens->verwachting_vandaag->tekst;

foreach($xml->weergegevens->verwachting_meerdaags->children() as $dag)
{
    echo $dag->dagweek."</td>";
    echo $dag->kanszon."% </td>";
    echo $dag->kansregen."% (".$dag->minmmregen."-".$dag->maxmmregen.")";
    echo $dag->mintemp."-".$dag->maxtemp;
    echo $dag->windrichting."-".$dag->windkracht;
    echo "<img src='".$dag->icoon."' height=30>";
}

foreach($xml->weergegevens->actueel_weer->weerstations->weerstation as $weer)
{
    echo $weer->stationnaam;
    echo $weer->luchtvochtigheid."%";
    echo $weer->temperatuurGC;
    echo $weer->windrichting."-".$weer->windsnelheidBF;
    echo "<img src='".$weer->icoonactueel."' height=30>";
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
remcotolsma schreef op dinsdag 20 januari 2009 @ 22:15:
echo $weatherStation->icoonactueel['ID'];
'

het komt erop neer dat ik gewoon de aanhalingstekens ben vergeten bij ID dat had ik ook staan bij mijn eerste post ->

$weer = $xml->weergegevens->actueel_weer->weerstations->weerstation[$nr]->icoonactueel[id];

alleen ik was dus de tekens niet, het werkt dus ook.

@dik_voormekaar tnx voor dat script. hier heb ik iets uit kunnen halen wat nodig had. namelijk een lisjt genereren van alle weerstations en daaruit 1 station te kiezen. ik had ze al allemaal handmatig in een array gestopt..
Pagina: 1