Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    11

    Estrapolare dati da un file XML

    Salve a tutti

    Ho la necessità di estrapolare dei dati da un file .xml

    il file xml è così strutturato:
    codice:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE shopmenu [
      <!ELEMENT shopmenu (submenu*)>
      <!ELEMENT submenu (menuitem*)>
      <!ELEMENT menuitem (title*, image*, link*, submenu*)>
      <!ELEMENT title (#PCDATA)>
      <!ELEMENT image (#PCDATA)>
      <!ELEMENT link (#PCDATA)>
    ]>
    <shopmenu>
      <submenu>
        <menuitem>
          <title>Monitor</title>
          <link>cat049.php?n=1</link>
        </menuitem>
        <menuitem>
          <title>Masterizzatori</title>
          <link>cat050.php?n=1</link>
        </menuitem>
        <menuitem>
          <title>Cartucce Compatibili</title>
          <link>cat048.php?n=1</link>
        </menuitem>
        <menuitem>
          <title>Inchiostri</title>
          <link>cat044.php?n=1</link>
        </menuitem>
        <menuitem>
          <title>Stampanti</title>
          <link>cat045.php?n=1</link>
        </menuitem>
        <menuitem>
          <title>Processori</title>
          <link>cat047.php?n=1</link>
        </menuitem>
      </submenu>
    </shopmenu>
    Per leggere il file ho utilizzato sax di Php
    con questo codice:
    Codice PHP:
    <?Php 

    $file 
    "shopmenu.xml"

    function 
    startElement($analizzatore$nome$attr){ 
        print 
    "[b]$nome =>[/b] "



    function 
    endElement($analizzatore$nome){ 
       print 
    "\n"


    function 
    characterData($analizzatore$valore){ 
      print 
    "$valore
    "
    ;


    $simpleparser xml_parser_create(); 
    xml_set_element_handler($simpleparser"startElement""endElement"); 
    xml_set_character_data_handler($simpleparser"characterData"); 

    $fp fopen($file"r"); 
    while(
    $data fread($fpfilesize($file))){ 
       if(!
    xml_parse($simpleparser$datafeof($fp))){ 
         print(
    xml_error_string(xml_get_error_code($simpleparser))); 
       } 
    //} 

    xml_parser_free($simpleparser); 

    ?> 

    Ora il risultato è il seguente:

    SHOPMENU => 

    SUBMENU => 

    MENUITEM => 

    TITLE => Monitor


    LINK => cat049.php?n=1




    MENUITEM => 

    TITLE => Masterizzatori


    LINK => cat050.php?n=1




    MENUITEM => 

    TITLE => Cartucce Compatibili


    LINK => cat048.php?n=1




    MENUITEM => 

    TITLE => Inchiostri


    LINK => cat044.php?n=1




    MENUITEM => 

    TITLE => Stampanti


    LINK => cat045.php?n=1




    MENUITEM => 

    TITLE => Processori


    LINK => cat047.php?n=1






      
      
     
      guida all'acquisto 
      condizioni di vendita 
      modalità di spedizione 
       
      acquista on line 
        
     
     
     
                  
     
     
    Giovedì 25 Maggio 2006  
     
     
    SHOPMENU => 

    SUBMENU => 

    MENUITEM => 

    TITLE => Monitor


    LINK => cat049.php?n=1




    MENUITEM => 

    TITLE => Masterizzatori


    LINK => cat050.php?n=1




    MENUITEM => 

    TITLE => Cartucce Compatibili


    LINK => cat048.php?n=1




    MENUITEM => 

    TITLE => Inchiostri


    LINK => cat044.php?n=1




    MENUITEM => 

    TITLE => Stampanti


    LINK => cat045.php?n=1




    MENUITEM => 

    TITLE => Processori


    LINK => cat047.php?n=1




    La mia necessità è quella di estrapolare il valore del link per poi aggiungero come collegamento a dei pulsanti.
    Quelle che conducono il mondo non sono le locomotyive ma le idee - Victor Hugo

  2. #2
    Conosco poco SAX, ma se il file è così corto può convenirti DOM e XPath (il manuale php è abbastanza semplice):


    if(!$dom=DOMDocument::loadXML($xml)){die("pj - fatal error: unable to parse xml input");} $XPath=new DOMXPath($dom);
    $ndl=$XPath->query("submenu/menuitem");
    for($n=0;$n<=$ndl.length;$n++){
    $ndl2=$XPath->query("title",$ndl->item(0));
    $ndl3=$XPath->query("title",$ndl->item(0));
    print("<a href='".$ndl2->item(0)->textContent."' title='".$ndl3->item(0)->textContent."'>");
    }
    <ciao><Enrico/></ciao>

  3. #3
    Scusa, piccola correzione


    if(!$dom=DOMDocument::loadXML($xml)){die("pj - fatal error: unable to parse xml input");} $XPath=new DOMXPath($dom);
    $ndl=$XPath->query("submenu/menuitem");
    for($n=0;$n<=$ndl.length;$n++){
    $ndl2=$XPath->query("title",$ndl->item(0));
    $ndl3=$XPath->query("link",$ndl->item(0));
    print("<a href='".$ndl2->item(0)->textContent."' title='".$ndl3->item(0)->textContent."'>");
    }
    <ciao><Enrico/></ciao>

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    11
    Non è che qualcuno saprebbe dirmi come fare son SAX?
    Quelle che conducono il mondo non sono le locomotyive ma le idee - Victor Hugo

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.