Ik heb via het phpbuilder formum het volgende stukje code kunnen bemachtigen:
De code parst een XML file (sho_products) naar een array. So far so good. Nu wil ik de gegevens opslaan in een bijpassende mysql tabel (vergelijkbaar met de inhoud van de XML file).
Ik kom er echter niet uit. Heb al uren lopen zoeken op GoT, Google etc. Ben een beetje blind geworden voor de oplossing vrees ik...
Volgens mij kan ik de conversie naar een array beter overslaan en de zaak gelijk in query's stoppen. Ik heb al van alles geprobeerd, maar kom er niet uit.
Kan iemand mij een zetje geven?
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| $tabel = "sho_products.xml"; function fetch_xml($xml,$root_level){ // Read XML File if(!($fp = fopen($xml, "r"))){ die("IO Error $xml_file"); } while($chunk = fread($fp,4096)){ $xml_data .= $chunk; } // Do the PHP Crap $parser = xml_parser_create(); xml_parse_into_struct($parser, $xml_data, &$assoc_arr, &$idx_arr); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); // Setup Some VARs $root_tag = $assoc_arr[$root_level]['tag']; // Used to define starting node $base_level = $root_level+1; $base_tag = strtolower($assoc_arr[$base_level]['tag']); // Used to define base tag $i = 0; $prefix = ""; foreach($assoc_arr as $element){ if($element['tag'] != $root_tag){ if(!preg_match('/^s+$/', $element['value'])){ $tag = strtolower($element['tag']); if($element['type'] == 'open' && $element['level'] > ($base_level+1)){ // Add Prefix's for new Tags Under Base $tag_prefix[$element['level']] = $tag; } elseif($element['type'] == 'close' && $element['level'] > ($base_level+1)){ // Remove Prefix's when tags closed $tag_prefix[$element['level']] = ""; } elseif($element['type'] == 'complete') { // Generate Prefix if(count($tag_prefix) > 0){ $str_prefix = ""; foreach($tag_prefix as $prefix){ if(!empty($prefix)) $str_prefix .= $prefix."_"; } } // End Prefix // Add Our Data to the Items Array $extra = ""; while(isset($items[$i][$str_prefix.$tag.$extra])){ if(empty($extra)) $extra = 1; $extra++; } $items[$i][$str_prefix.$tag.$extra] = $element['value']; } } if($tag == $base_tag){ // Add Our Atttributes if(isset($element['attributes']) && $element['type'] == 'open'){ $items[$i] = $element['attributes']; } // Start New Record if($element['type'] == 'close'){ $i++; } } } } return $items; } $items = fetch_xml('../import/sho_products.xml', 0); echo '<pre>'; print_r($items); echo '</pre>'; |
De code parst een XML file (sho_products) naar een array. So far so good. Nu wil ik de gegevens opslaan in een bijpassende mysql tabel (vergelijkbaar met de inhoud van de XML file).
Ik kom er echter niet uit. Heb al uren lopen zoeken op GoT, Google etc. Ben een beetje blind geworden voor de oplossing vrees ik...
Volgens mij kan ik de conversie naar een array beter overslaan en de zaak gelijk in query's stoppen. Ik heb al van alles geprobeerd, maar kom er niet uit.
Kan iemand mij een zetje geven?
[ Voor 8% gewijzigd door klaaz op 26-01-2004 16:05 ]