MOi aussi, mais c'est du PHP.
Le XML s'arrete à l'écriture et à la limité à l'exploitation du fichier. Ensuite, le maniment des données obtenu, c'est du PHP.
$practiceFile = $cfg['ressources_root'].'practice.xml';
$domPractice = new DOMDocument('1.0','UTF-8');
$domPractice->load($practiceFile);
$xpPractice = new DOMXPath($domPractice);
$result_find_practice = $domPractice->getElementById($practice[0]);
echo $result_find_practice;
if (isset($result_find_practice)){
echo "practice 2";
}
else {
echo "pas de practice";
}
en effet, j'ai à l'écran Code : Tout sélectionner
"pas de practice"<?
echo "<br /><br />Choose the different criteria which correspond to your request : ";
/*---------------------------------*/
//on ouvre le fichier criteria.xml
$criteriaFile = $cfg['ressources_root'].'criteria.xml';
$domCriteria = new DOMDocument('1.0','UTF-8');
$domCriteria->load($criteriaFile);
$xpCriteria = new DOMXPath($domCriteria);
$cat_criteria = $domCriteria->getElementsByTagName('cat');
$result_find_criteria = $domCriteria->getElementsByTagName('criteria');?>
<form name="critera" method="post" action="search-engine.php"><?
echo "<table align='center'><tr><ul>";
foreach($cat_criteria as $cat){
$name_cat = $cat->getAttribute('name');
$id_cat = $cat->getAttribute('id');
echo "<td valign='top'><br /><input type=\"checkbox\" name=\"cat\" value=\"$id_cat\"><strong>".$name_cat."</strong></input>";
foreach ($cat->childNodes as $criteria)
{
if ($criteria->nodeType != XML_ELEMENT_NODE) continue;
if ($criteria->tagName == 'criteria')
{
$name_criteria = $criteria->getAttribute('name');
$id_criteria = $criteria->getAttribute('id');
echo "<ul><input type=\"checkbox\" name=\"crit\" value=\"$id_criteria\">$name_criteria</input></ul>";
}
}
}
echo "</ul></tr></table>";?>
<input type="submit" value="Search" />
</form>
<?
/*-----------------------------------------------------*/
//on affiche le résultat en fonction d'un seul critère //
/*-----------------------------------------------------*/
$link_file = $cfg['ressources_root'].'/matrix/criteria-practice.xml';
$xml = simplexml_load_file($link_file);//on ouvre le fichier xml
//on vérifie l'existence des varaibles passées par le formulaire si elles n'existent pas, on meur affecte une valeur vide
if (!isset($_POST['cat'])) { $_POST['cat'] = ''; }
if (!isset($_POST['crit'])) { $_POST['crit'] = ''; }
//si les variables ne sont pas vides
if ( ($_POST['cat'] != '') or ($_POST['crit'] != '') )
{
foreach($xml->link as $value)
{
if( $value->criteria[0]['idcat']==$_POST['cat'] or $value->criteria[0]['idcrit']==$_POST['crit'] )
{
$practice[]=( (int)$value->practice[0]['id'] );
if (isset($practice[0]))
{
$id_practice = $practice[0];
}
else $id_practice = '';
}
}
if ( (isset($id_practice)) and ($id_practice != '') ) // si $id_practice n'est pas vide
{
//on ouvre le document xml qui correspond à la recherche
$practiceFile = $cfg['ressources_root'].'content/practice/'.$id_practice.'.xml';
$domPractice = new DOMDocument('1.0','UTF-8');
$domPractice->load($practiceFile);
$xpPractice = new DOMXPath($domPractice);
$item_practice = $domPractice->getElementsByTagName('item');
foreach ($item_practice as $item)
{
foreach ($item->childNodes as $child)
{
if($child->nodeType != XML_ELEMENT_NODE) continue;
if($child->tagName == 'title')
{
$titre = utf8_decode($child->firstChild->nodeValue);
}
elseif ($child->tagName == 'short_description')
{
$short_description = utf8_decode($child->firstChild->nodeValue);
}
}
$msg = "<p>$titre<br/>$short_description</p>";
}
}
else
{
$msg = "<p>Il n'y a pas de practice qui correspond à votre requête, veuillez reformuler une recherche</p>";
}
echo $msg;
}?>
Seulement, je n'arrive pas à faire en sorte que cette requête soit multi-critère.