Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wczytaniem pliku xml do zmiennej
Forum PHP.pl > Forum > XML, AJAX
zaajcu
Witam wszystkich mam problem z wczytaniem pliku xml do zmiennej żeby go sparsować na tablice.

Mam taki kod:

  1. public function xml_to_array($xml_url)
  2. {
  3.  
  4. $xml_url = '<modele>
  5. <model typ="AFD 4-400-025T" name="afd_4_400_025t" no="1400" pw="250" uv="400" ia="0.71" qm="4900" nart="42515030" />
  6. <model typ="AFD 4-450-037T" name="afd_4_450_037t" no="1400" pw="370" uv="400" ia="0.98" qm="6800" nart="42515040" />
  7. <model typ="AFD 4-500-055T" name="afd_4_500_055t" no="1400" pw="550" uv="400" ia="1.5" qm="8500" nart="42515050" />
  8. <model typ="AFD 4-560-090T" name="afd_4_560_090t" no="1400" pw="900" uv="400" ia="2.4" qm="11300" nart="42515060" />
  9. <model typ="AFD 4-600-090T" name="afd_4_600_090t" no="1450" pw="900" uv="400" ia="2.4" qm="13000" nart="42515000" />
  10. <model typ="AFD 4-700-220T" name="afd_4_700_220t" no="1420" pw="2200" uv="400" ia="4.8" qm="17000" nart="42515010" />
  11. <model typ="AFD 8-800-300T" name="afd_8_800_300t" no="1420" pw="3000" uv="400" ia="6.5" qm="26600" nart="42515020" />
  12. </modele>';
  13. $p = xml_parser_create();
  14. xml_parse_into_struct($p, $xml_url, $vals, $index);
  15. xml_parser_free($p);
  16. $this->index = $index;
  17. $this->val = $vals;
  18. }


i tu wszystko fajnie działa. Niestety jak usiłuje wczytać plik z dysku to się sypie;
próbowałem zrobić to na kilka sposobów, mianowicie:
  1. public function xml_to_array($xml_url)
  2. {
  3.  
  4. $xml_url = file($xml_url);
  5. $string ="";
  6. foreach ($xml_url as $x)
  7. $string .= $x;
  8.  
  9. var_dump($string);
  10.  
  11. $p = xml_parser_create();
  12. xml_parse_into_struct($p, $string, $vals, $index);
  13. xml_parser_free($p);
  14. $this->index = $index;
  15. $this->val = $vals;
  16. }


w tym przypadku var_dump zwraca mi zawartość
a do xml_parse_into_struct() zwraca jakies bzdury bo funkcja zwraca nie to co bym chciał.

następne podejście:

  1. public function xml_to_array($xml_url)
  2. {
  3.  
  4. $string = simplexml_load_file($xml_url);
  5. var_dump($string);
  6.  
  7. $p = xml_parser_create();
  8. xml_parse_into_struct($p, $string, $vals, $index);
  9. xml_parser_free($p);
  10. $this->index = $index;
  11. $this->val = $vals;
  12. }

i błędy które dostaje:
  1. Warning: simplexml_load_file() [function.simplexml-load-file]: models.xml:2: parser error : Specification mandate value for attribute ia in D:\...
  2. Warning: simplexml_load_file() [function.simplexml-load-file]: <model typ="CAB 125" name="cab_125" no="1600" pw="270" ia"0.2" qm="240" ps="27 in D:\...


jest ich o wiele więcej ale nie będę ich wszystkich wypisywał.
Próbowałem także fopen i fread ale niestety efekt jest podobny do rozwiązania z file()

nie wiem może jest jakiś problem z składnią xml'a ale niestety na to nie mam wpływu dostałem gotowe pliki i nie wyobrażam sobie poprawiać 150 plików :/

wersje php mam 5.3.4

Macie może jakiś pomysł jak to można inaczej zrobić?


skowron-line
Pokaż plik XML, będzie łatwiej wskazać błąd.
zaajcu
plik ma taką zawartość

  1. <modele>
  2. <model typ="CAB 125" name="cab_125" no="1600" pw="270" ia"0.2" qm="240" ps="275" fi="125" fio="97" dba="30" mk="16" nart="41002400" />
  3. <model typ="CAB 160" name="cab_160" no="2350" pw="348" ia"0.4" qm="390" ps="350" fi="160" fio="97" dba="36" mk="18" nart="41020410" />
  4. <model typ="CAB 200" name="cab_200" no="2000" pw="425" ia"0.7" qm="695" ps="425" fi="200" fio="97" dba="37" mk="22" nart="41020420" />
  5. <model typ="CAB 250" name="cab_250" no="1250" pw="205" ia"0.8" qm="1250" ps="210" fi="250" fio="97" dba="38" mk="25" nart="41020430" />
  6. <model typ="CAB 250 N" name="cab_250_n" no="2200" pw="610" ia"1.5" qm="1140" ps="610" fi="250" fio="97" dba="39" mk="27" nart="41020435" />
  7. <model typ="CAB 315" name="cab_315" no="1400" pw="350" ia"3.2" qm="2100" ps="350" fi="315" fio="97" dba="40" mk="33" nart="41020440" />
  8. <model typ="CAB 400" name="cab_400" no="1400" pw="475" ia"4.80" qm="3500" ps="480" fi="400" fio="97" dba="43" mk="35" nart="41020450" />
  9. <model typ="CAB 355" name="cab_355" no="1400" pw="450" ia"4.8" qm="3150" ps="460" fi="355" fio="97" dba="42" mk="35" nart="41020445" />
  10. <model typ="CAB 315 N" name="cab_315_n" no="1400" pw="425" ia"3.24" qm="2600" ps="425" fi="315" fio="97" dba="48" mk="33" nart="41020441" />
  11. </modele>

mortus
Pomiędzy atrybutem ia a jego wartością brakuje znaku = w pliku XML. Zresztą komunikat błędu coś o tym wspomina.
zaajcu
Faktycznie wink.gif
Teraz to ruszyło. Dzięki wielkie wink.gif
Pozdrawiam miłego wieczoru wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.