Visualizzazione dei risultati da 1 a 7 su 7

Discussione: php e DOM xml

  1. #1

    php e DOM xml

    Ciao

    utilizzo http://it.php.net/domxml per leggere un file xml e generare un'output in base ai vari elementi.

    ad esempio:

    Codice PHP:
    $items=$doc->getElementsByTagName("pippo");

    for(
    $i=0;$i<$items->length;$i++){
    echo 
    $items->item($i)->nodeValue;

    vorrei avere la possibilità di risalire al percorso XPATH di quell'elemento.
    Ad esempio, se il file xml è fatto cosi:

    codice:
    <persone>
    <attori>
    <pippo></pippo>
    </attori>
    <cartoni>
    <pippo></pippo>
    </cartoni>
    </persone>
    vorrei ottenere:
    /persone/attori/pippo
    e
    /persone/cartoni/pippo

    è possibile?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    Ciao.
    Ma se ho ben capito ti basta recuperare
    il none del tag e aggiungere lo / in una mia
    classe ad esempio ho questa riga

    Codice PHP:
    $query"/items/{$this->item}";          
    $items$this->xp->query($query); 
    Xpath possiede una sintassi abbreviata
    per accedere ai nodi di un file xml quindi
    vedi tu quella che si presta meglio ai
    tuoi propositi.




    Ps.

    Naturalmente devi partire dalla root del documento.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    ciao

    il problema è che io non so a priori la struttura xml che andrò a gestire!
    ne dal punto di vista degli elementi, ne da quello della profondità.

    Ad esempio, in un caso potrei trovarmi con una situazione simile:

    //libreria/ripiano/libro/pagina

    in un altro

    //report/tabella/

    in un altro

    //archivio/backup/discoA/cartella/sottocartella/

    sono solo degli esempio di query XPATH differenti.

    Provo a riformulare la domanda.

    Posso, da un qualsiasi nodo di un documento XML, ricostruire in modo automatico una query XPATH (o semplicemente un percorso) che mi permetta di identificarlo nel documento?

    grazie
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  4. #4
    Posso, da un qualsiasi nodo di un documento XML, ricostruire in modo automatico una query XPATH (o semplicemente un percorso) che mi permetta di identificarlo nel documento?
    Dunque una cosa del genere però il nome
    del file deve essere univoco in tutto il file xml

    getXpathByTagName('pippo');
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    mmm interessante sto metodo!
    ma non lo trovo

    ne qui

    http://php.net/dom

    ne qui

    http://php.net/domxml

    però ho trovato una funzione interessante...

    Codice PHP:
    function getNodeXPath$node ) {
            
    // REMEMBER THAT XPATHS USE BASE-1 INSTEAD OF BASE-0!!!
           
            // Get the index for the current node by looping through the siblings.
            
    $parentNode $node->parentNode;
            if( 
    $parentNode != null ) {
                
    $nodeIndex 0;
                do {
                    
    $testNode $parentNode->childNodes->item$nodeIndex );
                    
    $nodeName $testNode->nodeName;
                    
    $nodeIndex++;
                   
                    
    // PHP trickery!  Here we create a counter based on the node
                    //  name of the test node to use in the XPath.
                    
    if( !isset( $$nodeName ) ) $$nodeName 1;
                    else $
    $nodeName++;
                   
                    
    // Failsafe return value.
                    
    if( $nodeIndex $parentNode->childNodes->length ) return( "/" );
                } while( !
    $node->isSameNode$testNode ) );
               
                
    // Recursively get the XPath for the parent.
                
    return( getNodeXPath$parentNode ) . "/{$node->nodeName}[{$$nodeName}]" );
            } else {
                
    // Hit the root node!  Note that the slash is added when
                //  building the XPath, so we return just an empty string.
                
    return( "" );
            }
        } 
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  6. #6
    getXpathByTagName('pippo');
    era per fare un esempio di utilizzo
    cq ad ogni modo la ricerca del mio
    metodo_esempio è stata utile adesso hai
    per lo meno una traccia su cui lavorare



    PS.
    prova a dare un occhio anche a
    il parametro contextnode del metodo query.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  7. #7
    ah! ok ;-)

    comunque la funzione sopra illustrata funziona benone! era proprio quello che mi serviva!
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.