Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidator pliku XML napisany w PHP
Forum PHP.pl > Forum > XML, AJAX
wojtek992
Witam

Mam kod PHP ,który służy do walidacji pliku XML

  1. <?php
  2. $plik = file_get_contents("WDZP.xml");
  3.  
  4. libxml_use_internal_errors(true);
  5. $doc = new DOMDocument('1.0');
  6. $doc->loadXML($plik);
  7. $bledy = libxml_get_errors();
  8. $linie = explode("\n", $plik);
  9.  
  10. if (count($bledy)==0) {
  11. echo "<p>Plik poprawny</p>";
  12. } else {
  13. foreach($bledy as $b) {
  14. echo "<p>";
  15. echo "linia: ".$b->line.", kolumna: ".$b->column.", ".$b->message;
  16. echo "<br />".htmlentities($linie[$b->line-1]);
  17. echo "</p>";
  18. }
  19. // echo "<pre>";
  20. // print_r($bledy);
  21. // echo "</pre>";
  22. }
  23. ?>


Niestety wywala mi ciągle, że plik XML jest poprawny, nawet wtedy jak wgram kompletnie nie poprawny plik XML, co jest źle ? Podejrzewam, że nie mam biblioteki libxml , ale nie mogłem wyszukać w necie jak ją zainstalować (pracuje na php 5.1

Mam też taki kod

  1. <?php
  2.  
  3. $dom = new DOMDocument();
  4. $dom->load('WDZP.xml');
  5.  
  6.  
  7. if ($dom->validate()) {echo 'Walidacja dokumentu jest poprawna';}
  8.  
  9. else {echo 'Walidacja dokumentu jest błędna';}
  10.  
  11. ?>


Ale wyala błędy w taki niechlujny sposób :
Warning: DOMDocument::validate() [domdocument.validate]: Element DANEBANKU content does not follow the DTD, expecting (NAZWA , NUMERKONTA), got (NUMERKONTA ) in /home/wojtek9/public_html/Zadanie/walidacja2.php on line 7

Chciałbym aby wywalał tylko pierwszą część, wie ktoś jak to zrobić ? Albo co zrobić żeby działał pierwszy kod ?

Temat do zamknięcia ,znalazłem rozwiązanie :

  1. <?php
  2. /**
  3.  * Hold thrown errors statically
  4.  */
  5. function staticerror($errno, $errstr, $errfile, $errline, $errcontext, $ret = false)
  6. {
  7. static $errs = array();
  8.  
  9. if ($ret === true) {
  10. return $errs;
  11. }
  12.  
  13. $tag = 'DOMDocument::validate(): ';
  14. $errs[] = str_replace($tag, '', $errstr);
  15. }
  16.  
  17. // Load a document
  18. $dom = new DOMDocument;
  19. $dom->load('WDZP.xml');
  20.  
  21. // Set up error handling
  22. set_error_handler('staticerror');
  23. $old = ini_set('html_errors', false);
  24.  
  25. // Validate
  26. $dom->validate();
  27.  
  28. // Restore error handling
  29. ini_set('html_errors', $old);
  30.  
  31. // Get errors
  32. $errs = staticerror(null, null, null, null, null, true);
  33. print_r($errs);
  34.  
  35. ?>
wookieb
Strasznie słabe to twoje rozwiązanie
  1. libxml_use_internal_errors(true);
  2. $dom = new DomDocument('1.0', 'utf-8');
  3. $dom->loadXML('menu.xml');
  4.  
  5. print_r(libxml_get_errors());
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.