- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- raggruppare valori da file xml - xpath
-
raggruppare valori da file xml - xpath
Salve, premetto che sono un apprendista su questo genere di linguaggio di programmazione, quindi scusatemi se vi chiedo cose altamente banali:
Sto realizzando un programmino capace gestire le comande che vengono prese nei ristoranti... Ho creato una struttura in php,mysql, ajax e tutto funziona bene solo che è un po' lentino quindi ho deciso di lavorare un po' con XML...
Possiedo una struttura XML che indica le ordinazioni che vengono prese per ogni tavolo identificato con <tavolo id="1,2,3..ecc"> dove i numeri dell'ID identificano il numero del tavolo:
test.xml
<?xml version="1.0" encoding="UTF-8"?>
</opzione></tavolo>
<tavoli>
<tavolo id="2"><valore id="3">3</valore><opzione id="3:2
<tavolo id="2"><valore id="3">3</valore><opzione id="2:1 </opzione></tavolo>
</tavoli>articolo.xml
<?xml version="1.0"?>
<articoli>
<articolo id="1"><valore>COZZE GRADINATE</valore></articolo>
<articolo id="2"><valore>BIRRA 66Cl</valore></articolo>
<articolo id="3"><valore>GAMBERONI ALLA GRIGLIA</valore>
</articolo>
</articoli>opzione.xml
<?xml version="1.0"?>
<opzioni>
<opzione id="1"><valore>AGLIO</valore></opzione>
<opzione id="2"><valore>GHIACCIO</valore></opzione>
<opzione id="3"><valore>VAI CUCINA</valore></opzione>
<opzione id="4"><valore>MENO</valore></opzione>
<opzione id="5"><valore>MOZARELLA</valore></opzione>
</opzioni>e inoltre ho fatto delle modifiche al codice che legge e stampa le pietanze:
<?
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->load('test.xml');
//creo l'oggetto XPath
$xpath = new DOMXPath($dom); //imposto ed eseguo la query$asd = new DOMDocument('1.0', 'UTF-8');
$asd->load('articolo.xml');
//creo l'oggetto XPath
$xpath2 = new DOMXPath($asd);
//imposto ed eseguo la query$opzione = new DOMDocument('1.0', 'UTF-8');
$opzione->load('opzione.xml');
//creo l'oggetto XPath
$xpath3 = new DOMXPath($opzione);
//imposto ed eseguo la query$nodes = $xpath->query('//tavolo[@id="' . $idtavolo. '"]'); // estrapolo tutti i nodi che fanno parte al tavolo selezionato
//tavolo[not(@id=preceding::tavolo/@id)]/@id//crea la lista
foreach ($nodes as $node)
{
$entry = $xpath2->query('//articolo[@id="'.$node->nodeValue[0].'"]/valore'); //seleziono il valore dell'aticolo presente nel tavolo
foreach ($entry as $a)
{echo $a->textContent.'<br />';
for($i=1;$i<=6;$i++)
{
$entry2 = $xpath3->query('//opzione[@id="'.$node->textContent*.'"]/valore'); //seleziono l'opzione se presente collegata all'articolo ordinatoforeach ($entry2 as $b)
{
echo $b->textContent.'<br />';
}
}
}
}
?>quello che stampa é:
GAMBERONI ALLA GRIGLIA
VAI CUCINA
GHIACCIOGAMBERONI ALLA GRIGLIA
GHIACCIO
AGLIOquello che dovrebbe visualizzare è:
1: GAMBERONI ALLA GRIGLIA
VAI CUCINA
GHIACCIO1: GAMBERONI ALLA GRIGLIA
GHIACCIO
AGLIOe nel momento in cui ci sono 2 pietanze uguali:
2: GAMBERONI ALLA GRIGLIA
VAI CUCINA
GHIACCIO1: GAMBERONI ALLA GRIGLIA
GHIACCIO
AGLIOspero che mi possiate aiutare...
saluti!