Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434

    Problema con regexp/parser XML

    Salve a tutti.
    Ho creato un piccolo parser XML, questo è il codice

    Codice PHP:
    <?php
    class xmlParser {
      function 
    readDocument($file) {
        
    $get file_get_contents($file);
        
    $content preg_replace('/<\?xml(.[^>]*)\?>/'''$get);
        return 
    $this->parseStr($content);
      }
      function 
    parseStr($str) {
        
    preg_replace('/<(.[^>]*)>(.[^<>]*)<\/\\1>/ie'"\$rp = array(trim('\\1') => trim('\\2'));"$str);
        foreach(
    $rp as $k => $v) { $kk $k$vv $v; }
        if (
    preg_match('/<(.[^>]*)>/'$vv)) {
          
    $rp[$kk] = $this->parseStr($vv);
        }
        return 
    $rp;
      }
    }
    ?>
    il file xml che ho usato è..

    codice:
    <?xml version="1.0" ?>
    <prova>
    	<prova2>1</prova2>
    	<prova3>2</prova3>
    </prova>
    Il problema è molto semplice: legge solo il contenuto dell'ultimo tag nidificato nell'ultimo tag (e così via).
    Quello che restituisce è:

    Notice: Array to string conversion in C:\Programmi\Apache Group\Apache2\htdocs\xmlparser.php on line 9

    Notice: Array to string conversion in C:\Programmi\Apache Group\Apache2\htdocs\xmlparser.php on line 9
    Array ( [prova3] => 2 )


    Chi mi sa aiutare a correggere il preg_replace?

    [edit] Ho modificato il codice con

    Codice PHP:
    <?php
    class xmlParser {
      function 
    readDocument($file) {
        
    $get file_get_contents($file);
        
    $content preg_replace('/<\?xml(.[^>]*)\?>/'''$get);
        return 
    $this->parseStr($content);
      }
      function 
    parseStr($str) {
        
    preg_replace('/<(.[^>]*)>(.[^<>]*)<\/\\1>/ie'"\$rp[] = array(trim('\\1') => trim('\\2'));"$str);
        if (
    count($rp) == 1) {
          foreach(
    $rp as $ff) {
            foreach(
    $f as $k => $v) { $kk $k$vv $v; }
            if (
    preg_match('/<(.[^>]*)>/'$vv)) {
              
    $rp[0][$kk] = $this->parseStr($vv);
            }
          }
        }else{
          foreach(
    $rp as $kkk => $vvv) {
            foreach(
    $vvv as $k => $v) { $kk $k$vv $vvv; }
            if (
    preg_match('/<(.[^>]*)>/'$vv)) {
              
    $rp[$kkk][$kk] = $this->parseStr($vv);
            }
          }
        }
        return 
    $rp;
      }
    }
    ?>
    In questo caso prende gli elementi in <prova> ma non prende appunto <prova>.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    up..aiutatemi

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    non riuscivo a modificare quindi rispondo..
    http://phpfi.com/143660
    ulteriori modifiche al codice..il problema è sulla regexp nella linea 14. Cosa c'è di male nello scrivere $rp[] = array('1' => '2'); ?

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.