XML/QT/QDom - lecture d'un DTD et d'un XML [C++] - C++ - Programmation
Marsh Posté le 16-03-2005 à 18:20:40
salut
Citation : J'aimerai vérifier le fichier XML par le DTD en premier |
Je ne sais pas si c'est possible avec Qt.
Cependant tu as QXmlDTDHandler (présent dans la 3.2.3) qui vérifie tes éléments au fur et à mesure et qui s'arrête si tu déclare une erreur. Je ne l'ai jamais utiliser et je n'ai donc aucun conseil à te donner pour le coder, mais regarde les paramètres que tu as en entrée de chaque fonction à l'exécution et tu sauras quoi en faire peut-être. Sinon si tu trouves une façon de faire, je suis aussi intéressé par la réponse.
Tu as deux sites sur Qt qui seront sans doute plus à même de te répondre :
qtforum.org et prog.qt.free.fr
Marsh Posté le 17-03-2005 à 09:54:56
on te remercie irmatden (et mout de raisin aussi )
effectivement, dans la doc de QT il est marqué que le parser est "non validating", c'est a dire qu'il ne teste pas la validité du document XML. C'est pas grave, on laisse tomber le DTD, y'a plus de temps. en tout cas merci pour les liens, ca peut toujours nous aider si on a un autre probleme.
Marsh Posté le 11-03-2005 à 17:09:54
Salut a tous !
Apres une recherche qui n'a pas répondu a mes attentes, je pose la question :
j'utilise QT 3.2.1 (et je ne peux pas en utiliser d'autre).
J'ai un fichier contenant un DTD, et un autre contenant un fichier XML .
J'aimerai vérifier le fichier XML par le DTD en premier, et ensuite lire les valeurs des nodes de mon fichier XML. Pour l'instant j'arrive a parcourir les nodes et avoir leur nom, mais rien de plus (en utilisant QDomNode.tagName() )
Qt assistant n'arrive pas a me sortir la tete de l'eau non plus, pas plus que les bouquins sur QT que j'ai .
Si quelqu'un peut me filer un coup de main ca sera pas de refus.
Mes fichiers XML et DTD :
le XML :
<FILTRECOMBINE nom= "seuillage rouge puis binaire" nbfiltres= "2">
<DESCRIPTIONGLOBALE>
"Ce filtre produit un seuillage sur le rouge et transforme ensuite l'image en binaire"
</DESCRIPTIONGLOBALE>
<FILTRE nom= "seuillageRVB" nbparam= "6" >
<DESCRIPTION>
"filtre de seuillage selon les couleurs RVB"
</DESCRIPTION>
<ACCES type= "dll" >
"./seuillageRVB.dll"
</ACCES>
<PARAM type_visuel= "regle" nom= "Rmin" min="0" max="255" valeur="10" type_donnee="short unsigned int">
"rouge min"
</PARAM>
<PARAM type_visuel= "regle" nom="Rmax" min="0" max="255" valeur="60" type_donnee="short unsigned int">
"rouge max"
</PARAM>
<PARAM type_visuel="regle" nom="Vmin" min="0" max="255" valeur= "0" type_donnee="short unsigned int">
"vert min"
</PARAM>
<PARAM type_visuel= "regle" nom= "Vmax" min="0" max="255" valeur="0" type_donnee="short unsigned int">
"vert max"
</PARAM>
<PARAM type_visuel="checkbox" nom="Bmin" min="0" max="255" valeur="0" type_donnee="short unsigned int">
"bleu min"
</PARAM>
<PARAM type_visuel="regle" nom="Bmax" min="0" max= "255" valeur="0" type_donnee="short unsigned int">
"bleu max"
</PARAM>
</FILTRE>
<FILTRE nom= "binaire" nbparam="2">
<DESCRIPTION>
"Ce filtre transforme une image en binaire: toutes les valeurs de couleur comprises dans la fenetre sont passees a 1, les autres a 0"
</DESCRIPTION>
<ACCES type= "dll" >
"./binaire.dll"
</ACCES>
<PARAM type_visuel= "regle" nom="Smin" min="0" max="255" valeur="0" type_donnee="short unsigned int" >
"Seuil mini"
</PARAM>
<PARAM type_visuel="regle" nom="Smax" min="0" max="255" valeur= "60" type_donnee="short unsigned int">
"Seuil maxi"
</PARAM>
</FILTRE>
</FILTRECOMBINE>
le DTD :
<?xml version="1.0"?>
<!DOCTYPE DEFINITIONFILTRE [
<!ELEMENT filtrecombine (descriptionglobale?,(filtre,filtrecombine)+)>
<!ELEMENT descriptionglobale (#PCDATA)>
<!ATTLIST filtresauve nom CDATA #REQUIRED >
<!ATTLIST filtresauve nbfiltres CDATA #REQUIRED >
<!ELEMENT filtre (description?,acces,param*)>
<!ELEMENT description (#PCDATA)>
<!ATTLIST filtre nom CDATA #REQUIRED>
<!ATTLIST filtre nbparam CDATA #REQUIRED>
<!ELEMENT acces (#PCDATA)>
<!ATTLIST acces type (dll|so|exe) #REQUIRED>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param type_visuel (regle|radio|checkbox|editbox|pmbox) #REQUIRED>
<!ATTLIST param nom CDATA #REQUIRED>
<!ATTLIST param min CDATA #REQUIRED>
<!ATTLIST param max CDATA #REQUIRED>
<!ATTLIST param valeur CDATA #REQUIRED>
<!ATTLIST param type_donnee CDATA #required>
]>
merci d'avance!