Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> konstrukcja try catch i błędny xml
aladin07
post 25.01.2010, 09:37:55
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
wookieb
post 25.01.2010, 09:55:31
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Bo to jest błąd a nie wyjątek.

  1. while(@$xml->read())
  2. {
  3.  
  4. }


--------------------
Go to the top of the page
+Quote Post
aladin07
post 25.01.2010, 10:38:55
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
wookieb
post 25.01.2010, 11:06:03
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.


--------------------
Go to the top of the page
+Quote Post
aladin07
post 25.01.2010, 11:21:07
Post #5





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


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?

Ten post edytował aladin07 25.01.2010, 11:27:07
Go to the top of the page
+Quote Post
wookieb
post 25.01.2010, 11:35:04
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.


--------------------
Go to the top of the page
+Quote Post
aladin07
post 25.01.2010, 11:58:54
Post #7





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


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




Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:28