wYm,
il y a 13 ans
Bonjour a tous,
je pense que cela ferra l'affaire :
<?php
// Tableau qui va acontenir les missisons
$missions = array();
// Création d'une représentation du document
$dom = new DOMDocument('1.0', 'UTF-8');
// Charger les balises XML depuis le fichier 'missions.xml'
$dom->Load('missions.xml');
// Création d'un nouvel objet DOMXPath
$xpath = new DOMXPath($dom);
// Récupérer le mois
$mois = $xpath->evaluate('/missions')->item(0)->getAttribute('mois');
if(isset($_GET'affichage']) && $_GET'affichage'] == 'chauffeur' && isset($_GET'chauffeur'])) {
// Récupérer la liste des missions spécifique à un chauffeur
$query = '/missions/mission'.'[chauffeur/@nom=\''.$_GET['chauffeur'].'\']';
} else {
// Récupérer la liste de toutes les missions
$query = '/missions/mission';
}
// Exécution de la requête XPath
$nodes = $xpath->query($query);
foreach ($nodes as $i => $mission) {
// Indice utilisé pour les lieux
$j = 0;
// Distance total de chaque itineraire pour chaque mission
$missions$i]'distance_total'] = 0 ;
// ID de la mission courante
$missions$i]'id'] = $mission->getAttribute('id');
foreach ($mission->getElementsByTagName('*') as $key => $value) {
if($value->nodeName == 'chauffeur') {
// Si le node courant est 'chauffeur' on prend l'attribut nom
$missions$i]'chauffeur'] = $value->getAttribute('nom');
} else if($value->nodeName == 'lieu') {
/**
* Si le node courant est 'lieu' on crée un tableau indxé qui contient
* l'ensemble des valeurs concernant le lieu courant
**/
$missions$i]'distance_total'] += $value->getAttribute('distance');
$missions$i]'itineraire']$j]'lieu']'distance'] = $value->getAttribute('distance');
$missions$i]'itineraire']$j]'lieu']'typeLieu'] = $value->getAttribute('typeLieu');
$missions$i]'itineraire']$j]'lieu']'nom'] = $value->nodeValue;
$j ++;
} else if($value->nodeName != 'itineraire') {
// Sinon on prend la valeur textuelle du node
$missions$i]$value->nodeName] = $value->nodeValue;
}
}
}
print_r($missions);
?>