[PHP & XML] Probleem om in de subchild te komen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • troxx
  • Registratie: Mei 2001
  • Laatst online: 13-01-2020

troxx

Vechain maximalist

Topicstarter
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:
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


Acties:
  • 0 Henk 'm!

  • Mennootje
  • Registratie: December 2000
  • Laatst online: 25-05 00:36
Hoe kom je aan de variabele $geoLocationProperties op regel 18?

Draai je script eens met error_reporting(E_ALL) ?

Acties:
  • 0 Henk 'm!

  • troxx
  • Registratie: Mei 2001
  • Laatst online: 13-01-2020

troxx

Vechain maximalist

Topicstarter
die var moet $hotellistproperties zijn, dat heb ik verandert.
Verder heb ik error reporting aangezet en krijg ik fouten helemaal aan het einde van mijn script. 'undefined index', waarschijnlijk heeft hij dus een probleem met het bepalen van de 'nieuwe' root.

Voorbeeldje:
http://www.timdopmeijer.nl/parser/

aka Crypto T


Acties:
  • 0 Henk 'm!

  • troxx
  • Registratie: Mei 2001
  • Laatst online: 13-01-2020

troxx

Vechain maximalist

Topicstarter
niemand?

aka Crypto T