Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> DOMDocument i Exceptions, Dlaczego DOMDocument nie wyrzuca wyjątku
matid
post
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:
  1. <?php
  2.  
  3. try
  4. {
  5. $DOM = new DOMDocument;
  6. $DOM->strictErrorChecking = true;
  7. $DOM->validateOnParse = true;
  8. $DOM->Load( 'article.xml' );
  9. $xsl = new DOMDocument;
  10. $xsl->load( 'article.xsl' );
  11. $xslproc = new XSLTProcessor;
  12. $xslproc->importStyleSheet( $xsl );
  13. $test = $xslproc->transformToDoc( $DOM );
  14. echo $test->saveXML();
  15. }
  16. catch ( Exception $e )
  17. {
  18. echo 'Exception caught: ' . $e->getMessage();
  19. }
  20.  
  21. ?>

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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
matid
post
Post #2





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.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 23:53