• User

    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"?>
    <tavoli>
    <tavolo id="2"><valore id="3">3</valore><opzione id="3:2

    </opzione></tavolo>
    <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 ordinato

    foreach ($entry2 as $b)
    {
    echo $b->textContent.'<br />';
    }
    }
    }
    }
    ?>

    quello che stampa é:

    GAMBERONI ALLA GRIGLIA
    VAI CUCINA
    GHIACCIO

    GAMBERONI ALLA GRIGLIA
    GHIACCIO
    AGLIO

    quello che dovrebbe visualizzare è:

    1: GAMBERONI ALLA GRIGLIA
    VAI CUCINA
    GHIACCIO

    1: GAMBERONI ALLA GRIGLIA
    GHIACCIO
    AGLIO

    e nel momento in cui ci sono 2 pietanze uguali:

    2: GAMBERONI ALLA GRIGLIA
    VAI CUCINA
    GHIACCIO

    1: GAMBERONI ALLA GRIGLIA
    GHIACCIO
    AGLIO

    spero che mi possiate aiutare...

    saluti!