Hoi GoT,
Ik ben nieuw op het gebied van XML, heb enige ervaring op het gebied van PHP. Nu ben ik voor mezelf wat aan het klooien maar ik kom er niet uit.
Ik gebruik een reeds bestaande class:
Ik ben bezig om de volgende url te ontleden: http://xml.hotels.nl/hotel.xml?id=463&lang=nl
Op een gegeven moment duikt hij een niveau dieper (bij kamers), deze subchild krijg ik niet netjes in mijn code. Wat ik probeer is om te kijken wanneer de 'name' kamers is en dan probeer ik een nieuwe for loop te creeeren die één niveau dieper kijkt. Maar het werkt niet.
Wie helpt mij op weg?
Ik ben nieuw op het gebied van XML, heb enige ervaring op het gebied van PHP. Nu ben ik voor mezelf wat aan het klooien maar ik kom er niet uit.
Ik gebruik een reeds bestaande class:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| <? class XMLParser { var $xml_url; var $xml; var $data; function XMLParser($xml_url) { $this->xml_url = $xml_url; $this->xml = xml_parser_create(); xml_set_object($this->xml, $this); xml_set_element_handler($this->xml, 'startHandler', 'endHandler'); xml_set_character_data_handler($this->xml, 'dataHandler'); $this->parse($xml_url); } function parse($xml_url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $xml_url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $store = curl_exec ($ch); $data = curl_exec ($ch); curl_close ($ch); $parse = xml_parse($this->xml, $data, sizeof($data)); if (!$parse) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml)), xml_get_current_line_number($this->xml))); xml_parser_free($this->xml ); } return true; } function startHandler($parser, $name, $attributes) { $data['name'] = $name; if ($attributes) { $data['attributes'] = $attributes; } $this->data[] = $data; } function dataHandler($parser, $data) { if ($data = trim($data)) { $index = count($this->data) - 1; // begin multi-line bug fix (use the .= operator) $this->data[$index]['content'] .= $data; // end multi-line bug fix } } function endHandler($parser, $name) { if (count($this->data) > 1) { $data = array_pop($this->data); $index = count($this->data) - 1; $this->data[$index]['child'][] = $data; } } } ?> |
Ik ben bezig om de volgende url te ontleden: http://xml.hotels.nl/hotel.xml?id=463&lang=nl
Op een gegeven moment duikt hij een niveau dieper (bij kamers), deze subchild krijg ik niet netjes in mijn code. Wat ik probeer is om te kijken wanneer de 'name' kamers is en dan probeer ik een nieuwe for loop te creeeren die één niveau dieper kijkt. Maar het werkt niet.
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
29
30
31
32
33
34
35
36
37
38
39
40
| <? include('xmlparser.class.php'); $url = 'http://xml.hotels.nl/hotel.xml?id=463&lang=nl'; $myFile = new XMLParser($url); $xmlRoot = $myFile->data[0]; // hotellist Element if (sizeof($xmlRoot) > 0 ) { $hotellist = $xmlRoot['child']; // hotelid if (sizeof($hotellist) > 0) { $hotellistproperties = $hotellist[0]['child']; for ($i = 0 ; $i < sizeof($hotellistproperties); $i++) { if ($hotellistproperties[$i]['name'] == "KAMERS") { $kamerproperties = $hotellistproperties[$i]['name']['child']; for ($j = 0 ; $j < sizeof($kamerproperties); $j++) { echo $kamerproperties[$j]['name'] . " = " . $kamerproperties[$j]['content']."<br/>"; } //echo "Ja, hij is toch op het juiste moment de if ingegaan"; } else { echo $hotellistproperties[$i]['name'] . " = " . $hotellistproperties[$i]['content']."<br/>"; } } } } ?> |
Wie helpt mij op weg?
aka Crypto T