Page 1 sur 2

valider un xml par un dtd avec php

Posté : 21 déc. 2005, 23:07
par GillouX
hello,

tout est dans le titre,

au même titre que
xslt_process($xh, 'rssb.xml', 'rss.xsl'); permet de formater un xml avec un xsl

je voudrais savoir si il existait une fct en php capable de valider un xml par un dtd (sans devoir modif le xml, vu que c'est un xml distant)

merci d'avance

Posté : 21 déc. 2005, 23:15
par jeff
tu a des fonctions dom qui font cela mais il faut que la definition de la dtd soit dans le fichier, par contre tu peut etre t'en sotir avec l'utilisation de schema

Posté : 22 déc. 2005, 00:08
par GillouX
oui j'ai vu que avec dom , il faut que ce soit spécifé au début du xml

tu sais m'en dire plus sur schema?

Posté : 22 déc. 2005, 00:16
par jeff
voici une fonction qui peut te convenir
http://fr.php.net/manual/fr/function.do ... lidate.php
je n'ai pas encore utiliser les schema pour valider mes documents
mais de ce que j'en ai lu c'est plus puissant que la dtd et c'est le future standar
je pense qu'il y a des tuto sur developpez.com :wink:

Posté : 22 déc. 2005, 01:02
par GillouX
ok mais ce que j'aimerais vraiment faire c'est de pouvoir le valider par un dtd sans devoir modif le xml, c'est là qu'est le problème ...

Posté : 22 déc. 2005, 10:53
par jeff
la tu ne modifie pas ton xml avec les schemas et la fonction dom approprié, ton schema un fichier xml

Posté : 22 déc. 2005, 10:56
par GillouX
ah ok

j'ai du mal comprendre la chose alors, je vais y re-jeter un oeil

merci

Posté : 22 déc. 2005, 14:19
par GillouX
j'ai vu que avec schema le fichier de validation est un xsd, c'est la même chose qu'un DTD??

je pourrais mettre un dtd là à la place?

Posté : 22 déc. 2005, 14:37
par jeff
non ce n'est pas la meme chose et de plus la fonction dom attend un schema et non une dtd

j'ai acheté un bouquin "xml par le pratique" aus editions eni
il en parle et c'est pas mal
sinon va faire un tour sur le site zvon.org ils doivent en parler

Posté : 22 déc. 2005, 15:36
par GillouX
ok,j'ai été voir ce qu'était un fichiers .xsd

je commence à y voir plus clair


µ
merci pour tout

Posté : 22 déc. 2005, 16:03
par GillouX
j'ai testé ceci
<?php
  $fichier = 'test';
  $doc_xml = new DOMDocument();
  $doc_xml->validateOnParse = true;
  if($doc_xml->load($fichier . '.xml')){
    echo '<h3>Le document XML ' 
          . $test . 
          'n\'a été chargé !</h3>';
  

    if($doc_xml->schemaValidate($fichier . '.xsd'))
      echo '<p>Le document XML est valide '
         . 'par rapport au schéma W3C</p>';

  }
  else 
    echo '<p style="color:red">Le document XML ' 
         . $test . 
         'n\'a pu être chargé !</p>';
		 
?>
mais j'ai cela comme erreur
Warning: domdocument() expects at least 1 parameter, 0 given in d:\i.e.s.n - 3ème ti\2005-2006\[xml,html,php,css]\monsitephpe\test.php on line 3

Fatal error: Call to undefined function: load() in d:\i.e.s.n - 3ème ti\2005-2006\[xml,html,php,css]\monsitephpe\test.php on line 5
je suppose que la première, je dois pas trop m'en soucier par contre pour la deuxième ???

(je suis sous easyphp1.8)

merci d'avance

Posté : 22 déc. 2005, 16:09
par GillouX
apparement c'est dispo que dans php5 alors que avec easyphp on est encore avec php 4.3 :twisted:

c'est possible?

Posté : 22 déc. 2005, 16:17
par jeff
apparement c'est que pour php5

sinon tu a une autre methode
tu fait une copie deton fichier xml ou tu declare la dtd et tu le teste

Posté : 22 déc. 2005, 16:38
par GillouX
ouais mais c justement ce que je veux pas faire

merci

Posté : 22 déc. 2005, 16:42
par jeff
ba oui mais la t'est un peu bloquer
en quoi ca te gene de fair eune copie et la tester