Visualizzazione dei risultati da 1 a 8 su 8

Discussione: xml/php/xpath

  1. #1

    xml/php/xpath

    Ciao a tutti,
    per la prima volta, oggi ho utilizzato SimpleXML e xPath per connettermi e prelevare dati da un file xml con php.

    Rispetto ai metodi tradizionali, sembra più veloce ed immediato, ma ho alcuni dubbi quando devo selezionare dei nodi profondi.

    Ad es:

    con un file del genere:

    codice:
    <root>
      <elemento>
          <sezione>sezione</sezione>
                <sotto-sezione>sotto-sezione</sotto-sezione>
                <sotto-sezione>sotto-sezione</sotto-sezione>
                <sotto-sezione>sotto-sezione</sotto-sezione>
                <sotto-sezione>sotto-sezione</sotto-sezione>
          <sezione>sezione</sezione>
       </elemento>
    
       <elemento>
          <sezione>sezione</sezione>
                <sotto-sezione>sotto-sezione</sotto-sezione>
                <sotto-sezione>sotto-sezione</sotto-sezione>
          <sezione>sezione</sezione>
       </elemento>
    </root>
    come faccio a prelevare tutti i nodi?

    Se dovessi farlo singolarmente, ci riuscirei, ma vorrei ciclare i dati che mi interessano in base al numero di nodi documento.

    Dovrei ottenere una cosa del genere:

    codice:
    Documento 1: dati 'sezione'; dati 'sotto-sezione';
    Documento 2: dati 'sezione'; dati 'sotto-sezione' se presenti;

    Grazie.

  2. #2
    Proprio nessuno?!

    Ho sbagliato sezione? Avrei dovuto inserirlo in php?

  3. #3

  4. #4

  5. #5
    proprio nessuno, su questo argomento?

  6. #6

  7. #7
    Utente di HTML.it L'avatar di Takeno
    Registrato dal
    May 2007
    Messaggi
    146
    Codice PHP:
    <?php

    // Sherwin R. Terunez
    //
    // This is my own version of XML Object to Array
    //

    function amstore_xmlobj2array($obj$level=0) {
       
        
    $items = array();
       
        if(!
    is_object($obj)) return $items;
           
        
    $child = (array)$obj;
       
        if(
    sizeof($child)>1) {
            foreach(
    $child as $aa=>$bb) {
                if(
    is_array($bb)) {
                    foreach(
    $bb as $ee=>$ff) {
                        if(!
    is_object($ff)) {
                            
    $items[$aa][$ee] = $ff;
                        } else
                        if(
    get_class($ff)=='SimpleXMLElement') {
                            
    $items[$aa][$ee] = amstore_xmlobj2array($ff,$level+1);
                        }
                    }
                } else
                if(!
    is_object($bb)) {
                    
    $items[$aa] = $bb;
                } else
                if(
    get_class($bb)=='SimpleXMLElement') {
                    
    $items[$aa] = amstore_xmlobj2array($bb,$level+1);
                }
            }
        } else
        if(
    sizeof($child)>0) {
            foreach(
    $child as $aa=>$bb) {
                if(!
    is_array($bb)&&!is_object($bb)) {
                    
    $items[$aa] = $bb;
                } else
                if(
    is_object($bb)) {
                    
    $items[$aa] = amstore_xmlobj2array($bb,$level+1);
                } else {
                    foreach(
    $bb as $cc=>$dd) {
                        if(!
    is_object($dd)) {
                            
    $items[$obj->getName()][$cc] = $dd;
                        } else
                        if(
    get_class($dd)=='SimpleXMLElement') {
                            
    $items[$obj->getName()][$cc] = amstore_xmlobj2array($dd,$level+1);
                        }
                    }
                }
            }
        }

        return 
    $items;
    }

    ?>

    Prova questa funzione.
    Trovata nel "libro" riguardo SimpleXML su php.net

    Codice PHP:
    $XMLobj simplexml_load_file('file.xml');
    $XMLarray amstore_xmlobj2array($XMLobj);

    print_r($XMLarray); 
    Non l'ho testato

  8. #8

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 © 2020 vBulletin Solutions, Inc. All rights reserved.