Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: konstrukcja try catch i b³êdny xml
Forum PHP.pl > Forum > PHP
aladin07
witam

mam problem w jaki sposob z uzyciem konstrukcji try catch napisac skrypt
ktory w razie napotkania bledu podczas parsowania xmlreaderem nie bedzie sie
wywalal tylko pominie mi tego blednego xml'a (bo jest ich kilka tys.)

na razie mam konstrukcje w stylu

  1. try
  2. {
  3.  
  4. if(file_exists("temp.xml"))
  5. {
  6. $xml = new XMLReader();
  7. $xml->open("temp.xml");
  8. while($xml->read())
  9. {
  10. // tutaj dalsze zadania zwiazane z obsluga tego xml'a
  11. }
  12. throw new Exception( 'problem!' );
  13. }
  14. }
  15. catch (Exception $e)
  16. {
  17. echo $e;
  18. }
  19. // dalsza czesc skryptu


nie mniej jednak mimo wszystko przy blednym xml'u z jakim mam doczynienia
dostaje i tak komunikat

XMLReader::read() [function.XMLReader-read]: input conversion failed due to input error, bytes 0x81 0x4F 0xC5 0xBB

czy ja cos robie zle? moze w jakis inny sposob nalezy oblsuzyc taki wyjatek
moze w jakis inny sposob mozna wczesniej sprawdzic poprawnosc xml'a zeby ominac ten blad
wziasc sie za kolejny plik
z gory dzieki za wszelkie podpowiedzi
pozdrawiam
wookieb
Bo to jest b³±d a nie wyj±tek.

  1. while(@$xml->read())
  2. {
  3.  
  4. }
aladin07
a jest jakas mozliwosc zeby go ominac/pominac? - jak zwal tak zwal

nie ode mnie zalezy to jak taki plik xml wyglada a nie moge sobie pozwolic
aby kazdy z plikow rozpatrywac osobno bo w tym wypadku przeczy to
automatyzacji tego procesu smile.gif

moze mozna jakos sprawdzic poprawnosc xml'a przed jego parsowaniem?
wookieb
manual -> xmlreader http://pl.php.net/manual/pl/xmlreader.isvalid.php
Zajê³o mi to 30 sekund, taka ma³a porada na przysz³o¶c.
aladin07
juz to przerabialem ale nie wiem czy ja cos zlego z tym robie
w kazdym razie caly czas powyzsze daje mi TRUE czyli
pozytwna walidacje xml'a

nie wiem czy jest to odpowiedzialne za sprawdzenie poprawnosci drzewa xml'a?
choc i teraz probowalem mu poddac xml'a z niedomnietym znacznikiem

ale u mnie w kazdym razie blad polega na nieprawidlowych znakach - cos zlego
jest w kodowaniu samego tekstu miedzy znacznikami i stad wynika problem
bo poki co nie natrafilem na bledy tego typu choc jak to
napisalem powyzej nawet jak wrzucam do walidacji zgodnie z przykladem w manualu

  1. $xml = XMLReader::open('moj_xml.xml');
  2. $xml->setParserProperty(XMLReader::VALIDATE, true);
  3. var_dump($xml->isValid());


to otrzymuje 1bool(true)
takze wybaczcie za moja niewiedze ale nie potrafie sobie z tym poradzic sad.gif

moze error_reporting(0);
ale czy to jest tak na prawde dobre rozwiazanie?
wookieb
Faktycznie isValid nie sprawdza ca³ego drzewa. Wieæ wystarczy po prostu skorzystaæ z read() by wy³apaæ czy czy xml jest b³êdny.
Zrób sobie funkcjê, która bêdzie parsowa³a xmla i je¿eli bêdzie b³êdny to zwróci false, je¿eli bêdzie ok to zwróci jego tre¶æ. Taki jest raczej najprostszy sposób.

Dodatkowo spróbuj podaæ kodowanie xmla (drugi atrybut czy open()), mo¿e rozwi±¿e twój problem. Je¿eli nie wypu¶c tego xmla to potestujemy.
aladin07
czyli mam miec cos na wzor tego co ponizej - bo oczywiscie mi nie dziala i nadal wywala ten sam blad
ale to pewnie dlatego ze teraz przy najprostszej konstrukcji sam wysiadam w tym temacie bo juz mam mlynek w glowie smile.gif

  1. $xml = new XMLReader();
  2. $xml->open("temp.xml");
  3. if($xml->read()){
  4. while($xml->read() == true)
  5. {
  6. //przetwarzanie
  7. }
  8. else {
  9. echo 'blad';
  10. }

take ewentualnie prosze pomoz mi ta konstrukcje zrobic

a jesli chodzi o samego xml'a to ponizej


  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <main>
  3. <status>ok
  4. <hotelData id="0">
  5. <hotel>hotel: Hotel Pine Bay Resort</hotel>
  6. <texts>
  7. <text>
  8. <subject>Kategoria</subject>
  9. <content>*****</content>
  10.  
  11. </text>
  12. <text>
  13. <subject>Region</subject>
  14. <content>Kusadasi/Turcja</content>
  15. </text>
  16. <text>
  17. <subject>Opis</subject>
  18.  
  19. <content>Uznawany za jeden z najlepszych hoteli w rejonie Kusadasi, oferuje bardzo wysoki standard obsÅugi, przepiÄkne poÅoÅ¥enie, rewelacyjny aqua-park oraz wyÅmienitÄ kuchniÄ. Malowniczo poÅoÅ¥ony przy wÅasnej zatoce, w piÄknym ogrodzie i z piaszczystÄ plaÅ¥Ä, oferuje bogate animacje dla dzieci i dorosÅych oraz moÅ¥liwoÅÄ uprawiania róťnych sportów, co sprawia, Å¥e jest to idealne miejsce dla rodzin z dzieÄmi jak i osób aktywnych, poszukujÄcych obiektów z bogatÄ infrastrukturÄ.</content>
  20. </text>
  21. <text>
  22. <subject>POÅÅ»ENIE</subject>
  23. <content>ok. 6 km od centrum KUSADASI, tarasowo przy jednej z najpiÄkniejszych zatok w okolicach Kusadasi, ok. 68 km od portu lotniczego w Izmirze.</content>
  24. </text>
  25. <text>
  26.  
  27. <subject>PLAŻA</subject>
  28. <content>bezpoÅrednio przy hotelu, piÄkna, piaszczysta, odznaczona &quot;ÄkitnÄ FlagÄ…&quot;, z wÅasnym portem jachtowym, bezpÅatne leÅ¥aki, parasole, materace, rÄczniki za depozytem, na plaÅ¥y beach-bar objÄty all inclusive.</content>
  29. </text>
  30. <text>
  31. <subject>HOTEL</subject>
  32. <content>pierwszej klasy wioska turystyczna, oznaczona certyfikatem ISO 9001-2000, zbudowana w 1992 r., odnowiona w 2008-2009 r., skÅada siÄ z czÄÅci hotelowej odpowiadajÄcej standardowi piÄciu gwiazdek oraz kompleksu jednopiÄtrowych bungalowów, o niÅ¥szym standardzie, poÅoÅ¥onych tarasowo na niewielkim wzgórzu; w hotelu 240 pokoi, w bungalowach – 311 pokoi; 9 piÄter, 3 windy, caÅodobowa recepcja, restauracja gÅówna – dania w formie bufetu, krzeseÅka dla dzieci, restauracje à la carte (rybna, wÅoska, meksykaÅska, chiÅska, turecka; bezpÅatnie 1 kolacja w tygodniu w wybranej restauracji), piano-bar, &quot;Fuaye Bar&quot;, &quot;Saling Bar&quot;, &quot;Marina Cafe&quot;, &quot;Tenis Bar&quot;, &quot;Aqua Bar&quot;, &quot;Efe Cafe&quot;, &quot;Ampli Bar&quot;, beach-bar, sale konferencyjne, butiki, market, sala telewizyjna, bezpÅatny Internet bezprzewodowy w lobby; za opÅatÄ - kawiarenka Internetowa, room-service (tylko w budynku gÅównym), opiekunka do dziecka, fryzjer, pralnia; akceptowane karty kredytowe - Mastercard, Visa, American Express.</content>
  33.  
  34. </text>
  35. <text>
  36. <subject>POKÃJ</subject>
  37. <content>w czÄÅci hotelowej - 2-os. (moÅ¥liwoÅÄ 1 dostawki), ok. 24 m², obszerny i gustownie urzÄdzony, klimatyzowany, Åazienka (prysznic, wc, suszarka), telewizja satelitarna, telefon, sejf, mini-bar; Åóťeczko dla dziecka do 2 lat gratis; balkon; w bungalowach - 2-os. (moÅ¥liwoÅÄ 1 lub 2 dostawek), ok. 30 m², rodzinny, skÅada siÄ z dwóch pomieszczeÅ, skromny i prosto urzÄdzony, klimatyzowany, Åazienka (prysznic, wc, suszarka), telewizja satelitarna, telefon, sejf, mini-bar; Åóťeczko dla dziecka do 2 lat gratis; nieduÅ¥y taras.</content>
  38. </text>
  39. <text>
  40. <subject>SPORT I ROZRYWKA</subject>
  41.  
  42. <content>3 baseny, powierzchnia 720 m², 110 m², 45 m², sÅodka woda, gÅÄbokoÅÄ 1,50 m, kryty basen, powierzchnia 490 m², sÅodka woda, gÅÄbokoÅÄ 1,50 m, 4 brodziki, sÅodka woda, gÅÄbokoÅÄ 0,30-0,40 m, aqua-park dla dzieci i dorosÅych, przy basenach bezpÅatne leÅ¥aki, materace, parasole, rÄczniki za depozytem; kort do tenisa ziemnego (oÅwietlenie i wypoÅ¥yczenie sprzÄtu pÅatne), tenis stoÅowy, rzutki, siatkówka plaÅ¥owa, koszykówka, fitness, aerobic, gimnastyka w wodzie, mini-futbol, kajaki, rowery wodne, Åaźnia turecka, sauna, Åaźnia parowa, jacuzzi, mini-klub dla dzieci, plac zabaw dla dzieci, dzienne i wieczorne animacje; za opÅatÄ - dyskoteka, lekcje tenisa, masaÅ¥e, gry wideo, bilard, sporty wodne na plaÅ¥y - banan, parasailing, skutery, kajaki, Å¥eglowanie, narty wodne, nurkowanie.</content>
  43. </text>
  44. <text>
  45. <subject>ALL INCLUSIVE</subject>
  46. <content>Åniadanie (7.00-10.00), późne Åniadanie (10.00-11.00), obiad (12.30-14.30), przekÄski (12.30-16.00; 12.00-17.00), lody (16.00-17.00), kawa, herbata i ciastko (17.00-18.00), kolacja (19.00-21.30), nocne przekÄski (23.00-24.00), nielimitowana iloÅÄ napojów chÅodzÄcych oraz lokalnych napojów alkoholowych w godz. 10.00-24.00; wymagane noszenie opasek all inclusive.</content>
  47. </text>
  48. <text>
  49.  
  50. <subject>KONTAKT</subject>
  51. <content>0090/2566181919; www.pinebay.com</content>
  52. </text>
  53. </texts>
  54. </hotelData>
  55. </main>
  56.  
  57.  



nie moge sobie poradzic chocby z odkryciem jego kodowania
caly czas dostaje ze jest to UTF-8
wiec nie mam szans zeby wylapac wsrod wszystkich xml'i tych
"czarnych owiec" i je przekonwertowac
przekonwertowanie powyzszego z UTF-8 na widnows-1250 daje pozytywne
skutki - ale jak to wylapac
skoro nawet mb_detect_encoding pokazuje mi ze jest to UTF-8 sad.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.