1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida em PHP/XML

Discussão em 'Programação' iniciada por DaNi_Surfer, 17 de Maio de 2009. (Respostas: 1; Visualizações: 566)

  1. Estou começando a aprender sobre XML e estou tentando passar a informação de um ficheiro em formato XML para um ficheiro em PHP, mas está dando um erro que ainda não percebi como resolver.

    O erro que aparece é o seguinte:
    "Fatal error: Call to undefined method xmlBI:: parse() in C:\xampp\htdocs\exp\XML.php on line 7"

    Pelo que leio, não está definido o metodo mas parece-me que já o está feito :s

    Aqui está o código:
    Código:
    <?php
    class xmlBI {
     
     var $xml_parser;
     var $xml_file;
     var $html;
     var $open_tag;
     var $close_tag;
     
     
     //Classe construtura
     function xmlBI(){
     
      $this->xml_parser="";
      $this->xml_file="";
      $this->html="";
      $this->open_tag = array(
     
       "BI" => "\n<!-- XML começa nesta parte -->\n<table border=1 width=500><tr><td width=500>",
       "NUMERO-BI" =>  "<table border=0 width=200><tr><td width=200>",
       "NUMERO" => "<font face=verdana size=2>",
       "DIGITO-CONTROLO" => "<font face=verdana size=2>&nbsp;-&nbsp;",
       "EMISSAO" => "<table border=0 width=300><tr><td width=300>",
       "DATA" => "<font face=verdana size=2>",
       "LOCAL" => "<font face=verdana size=2>&nbsp;-&nbsp;",
       "NOME" => "<table border=0 width=500><tr><td width=500><font face=verdana size=2><b>",
       "FILIACAO" => "<table border=0 width=500><tr><td width=500>",
       "PAI" => "<font face=verdana size=2>",
       "MAE" => "<font face=verdana size=2>&nbsp;-&nbsp;",
       "NATURALIDADE" => "<table border=0 width=500><tr><td width=500>",
       "FREGUESIA" => "<font face=verdana size=2",
       "CONCELHO" => "<font face=verdana size=2>&nbsp;-&nbsp;",
       "RESIDENCIA" => "<table border=0 width=500><tr><td width=500>",
       "DATA-DE-NASCIMENTO" => "<table border=0 width=500><tr><td width=200><font face=verdana size=2>",
       "ESTADO-CIVIL" => "<td width=200><font face=verdana size=2>",
       "ALTURA" => "<td width=200><font face=verdana size=2>",
       "VALIDADE" => "<td width=200><font face=verdana size=2",
     
      );
     
      $this->close_tag = array(
     
       "BI" => "\n</td></tr></table><!-- XML termina nesta parte -->\n",
       "NUMERO-BI" => "</td><tr></table>",
       "DIGITO-CONTROLO" => "</font>",
       "EMISSAO" => "</td></tr></table>",
       "DATA" => "</font>",
       "LOCAL" => "</font>",
       "NOME" => "</b></font></td></tr></table>",
       "FILIACAO" => "</td></tr></table>",
       "PAI" => "</font>",
       "MAE" => "</font>",
       "NATURALIDADE" => "</td></tr></table>",
       "FREGUESIA" => "</font>",
       "CONCELHO" => "</font>",
       "RESIDENCIA" => "</td></tr></table>",
       "DATA-DE-NASCIMENTO" => "</font></td>",
       "ESTADO-CIVIL" => "</font></td>",
       "ALTURA" => "</font></td>",
       "VALIDADE" => "</font></td></tr><table>",
     
      );
     
    //Classe Destrutora (tem que ser invocada manualmente uma vez que o PHP não suporta destrutores)
    function destroy(){
     xml_parser_free($this->xml_parser);
    }
     
    function concat($str) {
     $this->html.=$str;
    }
     
     
    function startElement($parser, $name, $attrs){
     //global $open_tag;
     if($format=$this->open_tag[$name]){
      $this->html .= $format;
     }
    }
     
    function endElement($parser, $name){
     //global $close_tag;
     if($format=$this->close_tag[$name]){
      $this->html .= $format;
     }
    }
     
    function characterData($parser, $data){
     $this->html .= $data;
    }
     
    function parse(){
     $this->xml_parser = xml_parser_create();
     xml_set_object($this->xml_parser,$this);
     xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, true);
     xml_set_element_handler($this->xml_parser, "startElement","endElement");
     
     if(!($fp=fopen($this->xml_file, "r"))){
      die("Não foi possível abrir o ficheiro de XML.");
     }
     
     while($data = fread($fp, 4096)){
      if(!xml_parse($this->xml_parser, $data, $feop($fp))){
       die(sprintf("Erro de XML: %s na linha %d",xml_error_string(xlm_get_error_code($this->xml_parser)), 
       xml_get_current_line_number($this-> xml_parser)));
      }
     }
    }
    }
    }
     
     
    $bi = new xmlBI();
    $bi ->xml_file = "bilhete_de_entidade.xml";
    $bi ->parse();
    print ($bi->html);
    $bi -> destroy();
    ?>
     
    
    Agradeço ajudas... ;)
     
  2. marcobjorge

    marcobjorge Power Member

    Talvez um problema de parentesis?
     

Partilhar esta Página