Ik probeer met simpleXML een aantal XML sheets op te halen waarbij het bij sommige mis blijkt te gaan.
De XML's welke ik ophaal zien er als volgt uit:
De code welke ik gebruik is:
Nu krijg ik hier soms error's op, de reden kan ik niet helemaal terug vinden.
In MAINMENU staat bijvoorbeeld wel eens een &-teken echter blijkt dit niet het probleem te zijn. Als ik een
toepas dan blijft deze error terug gekomen en kan "simplexml_load_file" het bestand nog niet goed laden, ook niet een simpele "simplexml_load_file($file)" zonder enige andere parameters.
Ik heb het volgende geprobeerd om eerst de content te laden met file_get_contents en dan pas er wat mee te doen, dit werkt helaas ook niet.
Het blijkt dat het volgende stukje code prima 2 parallele arrays kan creeëren, echter, zonder de xml_special_chars crasht dit ook. Het werkt dus wel, ook op de versies welke bij een normale simpelxml_load_file crashen maar dan alleen met de replace functie.
Dit is mijn inziens gek te noemen, ik ben al bezig geweest om de boel om te zetten naar UTF en ben me er van bewust dat er geen <xml> tags om de XML output geen staan.
Ik wil dus gewoon een normale array terug, of at least de boel normaal in kunnen lezen, want daar gaat het al mis.
Het heeft me een nacht gekost maar ik ben wel een stuk wijzer wat je met XML kan, alleen dit kan ik nog niet opgelost krijgen.
De XML's welke ik ophaal zien er als volgt uit:
XML:
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
| <DATA> <STATUS>Successful authentication</STATUS> <ARTLCODE>BA159-MBR</ARTLCODE> <SHORTDESC><![CDATA[SI-D 1000V 1A/35Ap 300ns]]></SHORTDESC> <LONGDESC><![CDATA[]]></LONGDESC> <GENDESC><![CDATA[]]></GENDESC> <PRICE1>0.0401</PRICE1> <PRICE2>0.0259</PRICE2> <PRICE3>0.0167</PRICE3> <PRICE4>0.0108</PRICE4> <QUANTITY1>38</QUANTITY1> <QUANTITY2>400</QUANTITY2> <QUANTITY3>800</QUANTITY3> <QUANTITY4>1600</QUANTITY4> <PICTURE>HHDO41.JPG</PICTURE> <STOCK> 35430</STOCK> <GROUPING>019216</GROUPING> <BARCODE></BARCODE> <CATEGORY> <MAINMENU>Componenten</MAINMENU> <SUBMENU1>Diodes</SUBMENU1> <SUBMENU2>Overige Dioden</SUBMENU2> </CATEGORY> <UOM> <LENGTH>245</LENGTH> <WIDTH>80</WIDTH> <HEIGHT>75</HEIGHT> <WEIGHT>2</WEIGHT> <PACKAGE>1</PACKAGE> </UOM> </DATA> |
De code welke ik gebruik is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| <?php $fileName = 'http://URL/request.php?var1=ART1&var2=USER&var3=PASS'; $xml = simplexml_load_file( $fileName, LIBXML_NOCDATA ); if ( $xml === false ) { echo '<p>De XML kan niet worden geladen</p>'; } else { echo '<pre>' . print_r( $xml, true ) . '</pre>'; } ?> |
Nu krijg ik hier soms error's op, de reden kan ik niet helemaal terug vinden.
In MAINMENU staat bijvoorbeeld wel eens een &-teken echter blijkt dit niet het probleem te zijn. Als ik een
code:
1
| $string = str_replace("&","&",$string); |
toepas dan blijft deze error terug gekomen en kan "simplexml_load_file" het bestand nog niet goed laden, ook niet een simpele "simplexml_load_file($file)" zonder enige andere parameters.
Ik heb het volgende geprobeerd om eerst de content te laden met file_get_contents en dan pas er wat mee te doen, dit werkt helaas ook niet.
Het blijkt dat het volgende stukje code prima 2 parallele arrays kan creeëren, echter, zonder de xml_special_chars crasht dit ook. Het werkt dus wel, ook op de versies welke bij een normale simpelxml_load_file crashen maar dan alleen met de replace functie.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <?php function xml_special_chars($string) { $string = str_replace("&","&",$string); return $string; } $simple = xml_special_chars(file_get_contents($url)); $p = xml_parser_create(); xml_parse_into_struct($p, $simple, $vals, $index); xml_parser_free($p); ///echo "Index array\n"; //print_r($index); //echo "\nVals array\n"; //print_r($vals); print("<pre>".print_r($vals,true)."</pre>"); ?> |
Dit is mijn inziens gek te noemen, ik ben al bezig geweest om de boel om te zetten naar UTF en ben me er van bewust dat er geen <xml> tags om de XML output geen staan.
Ik wil dus gewoon een normale array terug, of at least de boel normaal in kunnen lezen, want daar gaat het al mis.
Het heeft me een nacht gekost maar ik ben wel een stuk wijzer wat je met XML kan, alleen dit kan ik nog niet opgelost krijgen.