Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Scansione DOM

  1. #1

    Scansione DOM

    Ho il file XML:
    codice:
    <? xml version="1.0" ?>
    <campionato>
    <squadra>
        <nome>juventus</nome>
        <punti>50</punti>
        <giocatore>Buffon</giocatore>
        <giocatore>Chiellini</giocatore>
        <giocatore>Cannavaro</giocatore>
        ...
        <giocatore>Giovinco</giocatore>
    </squadra>
    <squadra>
        <nome>milan</nome>
        <punti>40</punti>
        <giocatore>Dida</giocatore>
        <giocatore>Nesta</giocatore>
        <giocatore>Zambrotta</giocatore>
        ...
        <giocatore>Gattuso</giocatore>
    </squadra>
    </campionato>
    Vorrei ottenere tramite DOM il nome della squadra che ha X punti. In caso di parità tra più squadre che hanno X punti vorrei ottenere il nome di una di queste.
    Come posso fare?

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Se il file non e' enorme (tipo contiene solo la serie a ) io farei una cosa del genere
    Codice PHP:
    $f simplexml_load_file('f.xml');
    foreach(
    $f->squadra as $squadra){
            if((int)
    $squadra->punti === 50)
            {
                    echo 
    $squadra->nome;
            }


  3. #3
    questo codice penso che ritorni tutte le squadre che hanno 50 punti, io vorrei che ne ritornasse solo una (comunque posso pensarci io ).
    visto che hai fatto la specifica della serie a, esiste un algoritmo più efficiente?

  4. #4
    XPath

  5. #5
    mi faresti un esempio?

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Una roba tipo questa
    Codice PHP:
    $xml simplexml_load_file('f.xml'); //oppure DomDocument::load
    $result $xml->xpath('/campionato/squadra[punti=50]/nome'); //oppure Domxpath::query
    while(list( , $node) = each($result)) {
        echo 
    'nome: ',$node,"\n";

    Ma non e' piu' veloce
    Quello che volevo dirti io della serie a: usa xml se pensi che il tuo xml non crescera' sopra i 10mb. Altrimenti valuta un altro db. Poi se l'xml ti serve per qualcos'altro, esportazioni, flash - usalo solo per quello, non come db principale.

  7. #7
    Ho usato il foreach proposto sopra (non XPath) ma compare questo errore:
    Notice: Undefined property: DOMDocument::$squadra

  8. #8
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Posta il codice

  9. #9
    Codice PHP:
    ...
    $dom->loadXML($stringa);
    foreach (
    $dom->squadra as $s)             
        if (
    $s->punti=="50")
            return 
    $s->nome;
    return 
    false;
    ... 

  10. #10
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Ma ti facevano schifo i 2 esempi postati?

    Come hai fatto tu, non funzionera' mai. Non capisco perche' hai voluto usare un altro metodo, anche se non ne hai idea di come funzionino le cose, e a quanto pare nemmeno hai aperto la documentazione.

    Quello con l'attraversare il DOMDocument che hai scelto tu (lo deduco dal loadXML senza xpath), e' il metodo piu' rognoso ed il piu' lento (ribadisco: superlento, megalento, iperlento) per cercare un valore. Per la cronaca, dovrebbe essere cosi':

    Codice PHP:
    //supongo prima hai gia' dichiarato $dom = new DOMDocument();, e caricato la stringa dal file
    $dom->loadXML($stringa); 
    $squadre $dom->getElementsByTagName('squadra');
      foreach( 
    $squadre as $squadra )
      {
            if(
    $squadra->getElementsByTagName("punti")->item(0)->nodeValue == '50'){
                    echo 
    $squadra->getElementsByTagName("nome")->item(0)->nodeValue;
            }
       } 

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.