edit:
Après avoir cogité la solution réside en un tout simple:
le code xsl:
Bonsoir,
Voila j'ai un petit problème en manipulant du xml par le biais de xsl en php.
J'ai un fichier "source.xml" qui contient les données du site
J'ai un fichier "page.xsl" qui formate les données pour une page définit
Le tout est unifié avec du php.
Le problème est que à la fin j'ai bien les données formaté, mais aussi le reste des données non utilisé du fichier "source.xml" qui s'affiche sur la page .
Voici mes sources:
le fichier xml
le fichier xsl (pour une page)
le fichier php (une class)
Ce qui va donner dans ce cas là (j'ai mis en commentaire les données en trop):
Modifié par astron (30 May 2010 - 09:10)
Après avoir cogité la solution réside en un tout simple:
le code xsl:
<xsl:template match="*">
<xsl:apply-templates select="*"/>
</xsl:template>
Bonsoir,
Voila j'ai un petit problème en manipulant du xml par le biais de xsl en php.
J'ai un fichier "source.xml" qui contient les données du site
J'ai un fichier "page.xsl" qui formate les données pour une page définit
Le tout est unifié avec du php.
Le problème est que à la fin j'ai bien les données formaté, mais aussi le reste des données non utilisé du fichier "source.xml" qui s'affiche sur la page .
Voici mes sources:
le fichier xml
<?xml version="1.0" encoding="utf-8"?>
<pages>
<page name="vel">
<titre>ante</titre>
<css>css/ante.css</css>
<contenu>
<bloc name="bloc1">
Sono tabernis est
theatralium imae concrepantes
quae sua per naribus praecipua delicta
aurigarum pluviis quae.
</bloc>
<bloc name="bloc2">
Iussisse quoque principes propositum in adulatorum
</bloc>
</contenu>
</page>
<page name="offensionibus">
<titre>ipso</titre>
<css>../css/ipso.css</css>
<contenu>
<bloc name="bloc1">
Agens per Galli iam artissime
immodice Constantinopolim Apollinaris
socero Constantinopolim Armeniam numeros
iam conpertis.
</bloc>
<bloc name="bloc2">
Globis inter ardor quae ut
recurvosque persultat et ardor ingenti inter et
missilibus et missilibus.
</bloc>
</contenu>
</page>
</pages>
le fichier xsl (pour une page)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output
method="xml"
version="1.0"
encoding="utf-8"
omit-xml-declaration="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes" />
<xsl:template match="pages/page[@name='offensionibus']">
<html>
<head>
<title><xsl:value-of select="@name" /></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" media="screen" type="text/css" href="{css}" />
</head>
<body>
<h1>
<xsl:value-of select="titre" />
</h1>
<p>
<xsl:value-of select="contenu/bloc[@name='bloc1']" />
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
le fichier php (une class)
<?php
class interprete
{
protected $docXml;
protected $docXmlDom;
protected $docXsl;
protected $docXslDom;
protected $trans;
public function __construct($docXml , $docXsl){
if(!file_exists($docXml)){
exit('Le fichier "'.$docXml.'" n\'existe pas');
}
elseif(!file_exists($docXsl)){
exit('Le fichier "'.$docXsl.'" n\'existe pas');
}else{
$this->docXml = $docXml;
$this->docXsl = $docXsl;
clearstatcache();
}
}
public function constructionDom(){
$this->docXmlDom = new DOMDocument;
$this->docXslDom = new DOMDocument;
$this->docXmlDom->load($this->docXml);
$this->docXslDom->load($this->docXsl);
if(is_object($this->docXslDom ) && is_object($this->docXmlDom )){
return array(true, $this->docXslDom, $this->docXmlDom);
}else{
return false;
}
}
public function association(){
$checkVal = $this->constructionDom();
$this->trans = new XSLTProcessor;
if(is_object($this->trans) && $checkVal){
$this->trans->importStyleSheet($this->docXslDom);
return true;
}
else{
return false;
}
}
public function affichage(){
if($this->association()){
print $this->trans->transformToXml($this->docXmlDom);
}else{
exit('erreur');
}
}
}
?>
Ce qui va donner dans ce cas là (j'ai mis en commentaire les données en trop):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--antecss/ante.css
Sono tabernis est
theatralium imae concrepantes
quae sua per naribus praecipua delicta
aurigarum pluviis quae.
Iussisse quoque principes propositum in adulatorum -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>offensionibus</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" media="screen" type="text/css" href="../css/ipso.css" />
</head>
<body>
<h1>ipso</h1>
<p>
Agens per Galli iam artissime
immodice Constantinopolim Apollinaris
socero Constantinopolim Armeniam numeros
iam conpertis.
</p>
</body>
</html>
Modifié par astron (30 May 2010 - 09:10)