le 04/09/2006 à 20:08
LupusMic
Bonjour,
J'ai un petit problème cosmétique. Voici, simplifié, la problématique :
Le document XML à importer :
La DTD qui dit comment qu'il doit être, mon XML :
Le script, en exécution locale, qui permet de générer la page d'index :
Le template HTML de la page d'index :
Le résultat :
Comme vous le constaterez, malgréle namespace commun, libxml me rajoute des déclarations XML. Avez-vous déjà rencontré le problème et résolu la chose de manière élégante ?
(Désolé de ne pas utiliser le Wall, mais il n'est pas très adapté à mon problème ;))
Merci !
J'ai un petit problème cosmétique. Voici, simplifié, la problématique :
Le document XML à importer :
adv.xml
<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE adventures SYSTEM "adventures.dtd">
<adventures xmlns="adventures.dtd"
xmlns:html="http://www.w3.org/1999/xhtml">
<adventure id='adv-adoprixtoxis' kind='kind-sf'>
<title>Adoprixtoxis</title>
<synopsis>
<html:p>Une aventure spatiale !</html:p>
<html:p>Qui n'est pas terminée.</html:p>
</synopsis>
<opinion>
<html:p>Très bonne !</html:p>
<html:p>Mais faudrait en dire plus ;)</html:p>
</opinion>
</adventure>
</adventures>
La DTD qui dit comment qu'il doit être, mon XML :
adv.dtd
<!ELEMENT adventures (adventure)+ >
<!ELEMENT adventure (title,synopsis,opinion) >
<!ATTLIST adventure id ID #IMPLIED >
<!ATTLIST adventure title CDATA #IMPLIED >
<!ATTLIST adventure kind IDREF #IMPLIED >
<!ELEMENT title (#PCDATA) >
<!ELEMENT synopsis (#PCDATA)+ >
<!ELEMENT opinion (#PCDATA)+ >
Le script, en exécution locale, qui permet de générer la page d'index :
adv.php
<?php
$advsDoc = DomDocument::load('adventures.xml') ;
$advsListNode = $advsDoc->getElementsByTagName('adventure') ;
$templateDoc = DomDocument::load('idx-template.html') ;
$templateDoc->validate() ;
$contentNode = $templateDoc->getElementById('content') ;
$dlNode = $contentNode->ownerDocument->createElement('dl') ;
foreach($advsListNode as $advNode)
{
$filebase = $advNode->getAttribute('id') ;
$title = $advNode->getElementsByTagName('title')
->item(0)->nodeValue ;
$dtNode = $contentNode->ownerDocument->createElement('dt') ;
$ddNode = $contentNode->ownerDocument->createElement('dd') ;
$aNode = $contentNode->ownerDocument->createElement('a') ;
$aNode->nodeValue = "(…)" ;
$aNode->setAttribute('href', "$filebase.html") ;
$dtNode->nodeValue = "$title
:" ;
// $ddNode->nodeValue = "Premier p" ;
$pNode = $advNode->getElementsByTagName('synopsis')->item(0)
->getElementsByTagName('p')->item(0) ;
$pNode = $ddNode->ownerDocument->importNode($pNode, true) ;
$pNode->appendChild($aNode) ;
$ddNode->appendChild($pNode) ;
$dlNode->appendChild($dtNode) ;
$dlNode->appendChild($ddNode) ;
}
$contentNode->insertBefore($dlNode, $contentNode->lastChild) ;
$templateDoc->normalize() ;
$templateDoc->save("{$advsDir}index.html") ;
unset($templateDoc) ;
?>
Le template HTML de la page d'index :
adv.html
<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<title>Aventures MP3</title>
<link rel="stylesheet" type="text/css" href="../style.css" />
</head>
<body>
<div id="body">
<div id="content">
<h1>Aventures.</h1>
<div class="section">
<p>
Voici la liste alphabétique des aventures
netophoniques
:
</p>
</div>
</div>
</body>
</html>
Le résultat :
index.html
<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<title>Aventures MP3</title>
<link rel="stylesheet" type="text/css" href="../style.css" />
</head>
<body>
<div id="body">
<div id="content">
<h1>Aventures.</h1>
<div class="section">
<p>
Voici la liste alphabétique des aventures
netophoniques
:
</p>
<dl><dt>Adoprixtoxis
:</dt>
<dd xmlns:html="http://www.w3.org/1999/xhtml">
<p xmlns:html="http://www.w3.org/1999/xhtml">Une aventure spatiale !
<a href="adv-adoprixtoxis.html">(…)</a></p></dd></dl>
</div>
</div>
</body>
</html>
Comme vous le constaterez, malgréle namespace commun, libxml me rajoute des déclarations XML. Avez-vous déjà rencontré le problème et résolu la chose de manière élégante ?
(Désolé de ne pas utiliser le Wall, mais il n'est pas très adapté à mon problème ;))
Merci !