Bonjour,
J'ai un sacré problème avec XML je viens donc m'en remettre à vous. Suite au réponse données dans un précédent topic j'ai reussi parfaitement mon affichage grâce à une feuille de style XSL. Mais désormais je suis bloqué en amont.
PROBLEME I
Gràce à une boucle php, je crée un arbre XML qui contiens des informations contenus dans une base de donnée. J'utilise le code suivant:
Ce code marche à une exception près : il ne rempli pas les balise <news> si le texte est trop long, en gros si il fait plus de quelques mots. Pour les textes court pas de soucis. Plutot que de creer un noeud de type texte j'ai essayer ça :
PROBLEME II
On m'a suggéré d'utiliser une DTD ou un schema (ce qui peut sembler légitime). J'ai donc rajouter des lignes à mon code :
Et creer le fichier billet.xsd suivant :
J'ai alors droit à l'erreur suivant quand je j'appel ma page :
J'ai découvert le xsd aujourd'hui donc le code présenter ci-dessus fera peut-être sourir les spécialistes, je m'en excuse.
Si quelqu'un à une/des réponses à mes questions, je lui en serait trés reconnaisssant. Merci d'avance.
Modifié par lanfisis (19 Jun 2006 - 22:14)
J'ai un sacré problème avec XML je viens donc m'en remettre à vous. Suite au réponse données dans un précédent topic j'ai reussi parfaitement mon affichage grâce à une feuille de style XSL. Mais désormais je suis bloqué en amont.
PROBLEME I
Gràce à une boucle php, je crée un arbre XML qui contiens des informations contenus dans une base de donnée. J'utilise le code suivant:
$tree = new domDocument();
$include = new domelement('include');
$tree->appendChild($include);
while($tab = mysql_fetch_array($return))
{
$billet = new domelement('billet');
$include->appendChild($billet);
$billet->setAttribute('date', $tab[$this->chp_date]);
$billet->setAttribute('titre', $tab[$this->chp_titre]);
$texte = new domText();
$texte->appendData($tab[$this->chp_texte]);
$billet->appendChild($texte);
}
print $tree->saveXML();
Ce code marche à une exception près : il ne rempli pas les balise <news> si le texte est trop long, en gros si il fait plus de quelques mots. Pour les textes court pas de soucis. Plutot que de creer un noeud de type texte j'ai essayer ça :
$billet->nodeValue = $tab[$this->chp_texte];
mais j'ai rencontré le même problème. PROBLEME II
On m'a suggéré d'utiliser une DTD ou un schema (ce qui peut sembler légitime). J'ai donc rajouter des lignes à mon code :
$tree = new domDocument();
$include = new domelement('include');
$tree->appendChild($include);
$include->setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$include->setAttribute('xsi:noNamespaceSchemaLocation','inc/schem/billet.xsd');
while($tab = mysql_fetch_array($return))
{
$billet = new domelement('billet');
$include->appendChild($billet);
$billet->setAttribute('date', $tab[$this->chp_date]);
$billet->setAttribute('titre', $tab[$this->chp_titre]);
$texte->appendData($tab[$this->chp_texte]);
$billet->appendChild($texte);
}
$tree->schemaValidate('inc/schem/billet.xsd');
print $tree->saveXML();
Et creer le fichier billet.xsd suivant :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd">
<xsd:element name="include">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="billet" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="date" type="xsd:date"/>
<xsd:attribute name="titre" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
J'ai alors droit à l'erreur suivant quand je j'appel ma page :
Warning: DOMDocument::schemaValidate() [function.DOMDocument-schemaValidate]: The file "/homepages/40/d160546917/htdocs/chat/inc/schem/billet.xsd" is not a XML schema. in /homepages/40/d160546917/htdocs/chat/inc/class/billet.php5 on line 121
Warning: DOMDocument::schemaValidate() [function.DOMDocument-schemaValidate]: Invalid Schema in /homepages/40/d160546917/htdocs/chat/inc/class/billet.php5 on line 121
J'ai découvert le xsd aujourd'hui donc le code présenter ci-dessus fera peut-être sourir les spécialistes, je m'en excuse.
Si quelqu'un à une/des réponses à mes questions, je lui en serait trés reconnaisssant. Merci d'avance.
Modifié par lanfisis (19 Jun 2006 - 22:14)