![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Mam taki kod:
No i wszystko jest ok, dopóki nie chce spróbować złapać wyjątku. Zmieniam kolejność elementów w dokumencie XML i wyświetla mi takie coś: Kod Warning: DOMDocument::load() [function.load]: Element article content does not follow the DTD, expecting (title , date , author+ , content), got (date title author content ) in /home/matid/www/Current/XML/article.xml, line: 15 in /home/matid/www/Current/XML/XML.test.php on line 8 Logicznym się wydaje, że powinno wyrzucić wyjątek, niestety tak nie jest. Ustawienie zmiennej strictErrorChecking na true (BTW domyślnie też jest true) powinno zmusić DOM do wyrzucania DOMException. Wie ktoś dlaczego? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 9.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Czemu oczekujesz od validatora DTD, że wyrzuci wyjątek? Błąd DTD to nie błąd parsera, ani też błąd podczas ładowania - a takie właśnie wywalają DOMException. A Warning jest generowany chyba tylko dlatego, żeby w jakiś sposób było wiadomo, że validacja się nie powiodła(jeśli weryfikujesz na starcie nie masz możliwości zobaczenia co zwróciła weryfikacja). Zauważ, że po tych warningach dokument XML w przeglądarce nadal jest wyświetlany.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(dasko @ 2005-05-04 19:06:38) Czemu oczekujesz od validatora DTD, że wyrzuci wyjątek? Błąd DTD to nie błąd parsera, ani też błąd podczas ładowania - a takie właśnie wywalają DOMException. A Warning jest generowany chyba tylko dlatego, żeby w jakiś sposób było wiadomo, że validacja się nie powiodła(jeśli weryfikujesz na starcie nie masz możliwości zobaczenia co zwróciła weryfikacja). Zauważ, że po tych warningach dokument XML w przeglądarce nadal jest wyświetlany. No dobra, ale trochę nielogiczne wydaje mi się wywalanie błędu DTD przez funkcję DOMDocument::validate(); W manualu pisze, że jeśli walidacja się nie powiedzie, zwraca false, a jeśli się powiedzie, zwraca true. Tylko po co jeszcze ten warning... Poradziłem sobie po prostu wyciszając tę funkcję, ale IMO jest to trochę pokrętne rozwiązanie. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 9.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat W manualu pisze, że jeśli walidacja się nie powiedzie, zwraca false, a jeśli się powiedzie, zwraca true. Tylko po co jeszcze ten warning... Widocznie zarówno weryfikacja przy ładowaniu jak i ta ręcznie wywołana wykorzystują dokładnie te same procedury. Rzeczywiście podczas ręcznego sprawdzania raczej nie powinno wywalać tego Warninga, ale przecież rezultatu validacji przy ładowaniu XMLa nie przechwycisz w żaden sposób. Powinni jakoś zaimplementować warunkową generację tego błedu. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
A ja słyszałem, że tylko konstruktory obiektow dostępnych natywnie w php v5 wywalają wyjątki - reszta już nie...
-------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
I tak to musisz robić...
-------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
IMHO ten warning jest potwornym kretynizmem. Jak waliduję plik XML, to raczej po to, żeby sprawdzić, czy jest OK i coś z tym zrobić. Nie po to, żeby wywalić użytkownikowi na ekran obrzydliwy komunikat i prawdopodobnie rozwalić layout swojej strony.
Nie znam innego sposobu niż @ przed wywołaniem funkcji. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:05 |