Suche XMl Parsen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Suche XMl Parsen

    Hi
    Ich versuche mich grade im XML verarbeiten
    und zwar habe ich vor, XML-Dateien wie diese auszulesen, am besten in verschachtelte arrays zu packen und dann nach und nach aufzudröseln um sie dann z.B. in einer Datenbank zu speichern (man kann natürlich selber XML-Dateien angeben )
    das klappt bis jetzt auch ganz gut, abgesehen davon, dass in der XML datei für manche einträge "id" attribute vergeben wurden. Dadurch nimmt mein script aber nur den letzten eintrag aus dieser gruppe an
    Code:
    <entry id="0">
      <count>134234</count> 
      <name>Test1</name> 
    </entry>
    <entry id="1">
      <count>24234</count> 
      <name>Test2</name> 
    </entry>
    meine funktion bis jetzt:
    PHP-Code:
            function xml2array($text) {
               
    $reg_exp '/<(.*?)>(.*?)<\/\\1>/s';
               
    preg_match_all($reg_exp$text$match);
               foreach (
    $match[1] as $key=>$val) {
                   if ( 
    preg_match($reg_exp$match[2][$key]) )
                         {
                       
    $array[$val][] = xml2array($match[2][$key]);
                   }
                         else
                         {
                       
    $array[$val] = $match[2][$key];
                   }
               }
               return 
    $array;
            } 

  • #2
    Klingt so weit alles ganz nett, aber was willst du eigentlich?

    Kommentar


    • #3
      ich bekomme das:
      Array ( [0] => Array ( [count] => 24234 [name] => Test2 ) )
      Will aber in etwa folgendes:
      Array ( [0] => Array ( [count] => 134234 [name] => Test1 ) [1] => Array ( [count] => 24234 [name] => Test2 ) )
      weiß aber nicht wie
      grundlage is halt der code da oben

      Kommentar


      • #4
        Dann zeig mal bitte deine Ansätze.

        Ein Scriptgesuch ist das nämlich nicht. *verschieb*

        Kommentar


        • #5
          also, ich hab folgenden ansatz (ziemlich ausgereift eigentlich)
          PHP-Code:
          function fetchUrlWithoutHanging($url)
          {
          for 
          feed before displaying page without feed
          $numberOfSeconds
          =4;

          error_reporting(0);
          $url str_replace("http://","",$url);
          $urlComponents explode("/",$url);
          $domain $urlComponents[0];
          $resourcePath str_replace($domain,"",$url);
          $socketConnection fsockopen($domain80$errno$errstr$numberOfSeconds);

          if (!
          $socketConnection)
          {
          Web site
          print("<!-- Network error: $errstr ($errno) -->");
          }
          else {
          $xml '';
           
          fputs($socketConnection"GET /$resourcePath HTTP/1.0\r\nUser-Agent: POWER PHP (Mozilla Compatible)\r\n\r\n");
          while (!
          feof($socketConnection))
          {
              
          $xml .= fgets($socketConnection128);
          }
          fclose ($socketConnection);
          }
          return(
          $xml);

          }
                  function 
          xml2array($text) {
                     
          $reg_exp '/<(.*?)>(.*?)<\/\\1>/s';
                     
          preg_match_all($reg_exp$text$match);
                     foreach (
          $match[1] as $key=>$val) {
                         if ( 
          preg_match($reg_exp$match[2][$key]) )
                               {
                             
          $array[$val][] = xml2array($match[2][$key]);
                         }
                               else
                               {
                             
          $array[$val] = $match[2][$key];
                         }
                     }
                     return 
          $array;
                  }
          $array xml2array(fetchUrlWithoutHanging($_POST[xml])); 
          als $_POST[xml] wird folgende URL übertragen:
          http://report.fatal-vortex.de/report...8a762.34748954

          Kommentar


          • #6
            PHP-Code:
            function xml2array($text) {
              
            $p xml_parser_create();
              
            xml_parse_into_struct($p$text$vals$tags);
              
            xml_parser_free($p);

              foreach (
            $tags['NAME'] as $k=>$v) {
                
            $out[$k] = array(
                        
            'name' => $vals[$v]['value'],
                        
            'count' => $vals[$tags['COUNT'][$k]]['value']
                    );
              }
              
              return 
            $out;

            EDIT:
            bezieht sich auf dein Beispiel, foreach-Schleife muß auf deine XML-Struktur angepasst werden

            Kommentar


            • #7
              hm, ja, das is ja soweit schon ganz gut
              das problem is: das da ganz oben is ja nur ein auszug
              der link in meinem letzen beitrag führt zur original-datei, und sind die dann unterschiedlich
              manche mit, manche ohne id
              hier nochma der link
              und: nein, ich kann die xml-datei nich ändern, bevor das einer fragt.
              das is ja grad mein problem

              Kommentar

              Lädt...
              X