2013-06-06 57 views
0
<?xml version="1.0" encoding="UTF-8"?> 
<testSuiteResults> 
    <testSuite> 
    <startTime>13:46:06</startTime> 
    <status>FAILED</status> 
    <testSuiteName>Web TestSuite</testSuiteName> 
    <timeTaken>13907</timeTaken> 
    <testRunnerResults> 
     <testCase> 
     <reason>Failing due to failed test step</reason> 
     <startTime>13:46:06</startTime> 
     <status>FAILED</status> 
     <testCaseId>2c0c10d3-f76f-43ae-900d-6e64bb96203f</testCaseId> 
     <testCaseName>CorTestCase</testCaseName> 
     <timeTaken>7021</timeTaken> 
     <testStepResults> 
      <result> 
      <message>Step 1 [www.coriolis.eu.org] OK: took 2309 ms</message> 
      <name>www.coriolis.eu.org</name> 
      <order>2</order> 
      <started>13:46:06.266</started> 
      <status>OK</status> 
      <timeTaken>2309</timeTaken> 
      </result> 
</testSuite> 
</testCase> 
</testSuiteResults> 

嗨,我有這個XML文件我試圖讓數組中的「狀態,timeTaken」標籤。我使用這個功能:xml解析器php數據庫

function XMLtoARRAY($fichier,$item,$champs) { 
    // on lit le fichier 
    if(file_exists($fichier)){ 
     if($chaine = @implode("",@file($fichier))) { 

       // on éclate les objets <item> 
       $tmp = preg_split("/<\/?"."\/".$item.">/",$chaine); 
       // $tmp4 = preg_split("/<\\/?".$item.">/", $chaine); 

       //for($j=0;$j<sizeof($tmp4)-1;$i+=1){ 
       // on parcours les <item> 
       for($i=0;$i<sizeof($tmp)-1;$i+=1){ 
         // on recherche les champs demandés 
         foreach($champs as $champ) { 
           $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]); 
           // on ajoute l'élément au tableau 
           $tmp3[$i][$champ] = @$tmp2[1]; 
         } 
       } 
       //} 
       // retourne le tableau associatif 
       return $tmp3; 


     } 
    }else{ 
      return "Le fichier n'existe pas"; 
    } 
} 

問題是當我想把它放在我的數據庫空行。這裏是我的數據庫功能:

function XMLtoSQL($fichier,$item,$champs,$test=0){ 

     //On recupère le tableau PHP correspondant au fichier XML 
     $xml = XMLtoARRAY($fichier,$item,$champs); 
     if(is_array($xml)){ 
       getconnection(); 
       $nom_table="result"; 
       $requetes_insert=array(); 
       $requete=""; 
       foreach($xml as $un_enregistrement){ 
         $requete="INSERT INTO ".$nom_table; 
         $col_name="("; 
         $value="("; 
         foreach($un_enregistrement as $champs=>$valeur){ 
           $col_name.=$champs.","; 

           $value.="\"".$valeur."\","; 

         } 
         //$col_name=substr($col_name,0,-1); 
         $value=substr($value,0,-1); 
         $requete.=" VALUES ".$value.")"; 
         $requetes_insert[]=$requete; 

       } 

       //Si tout est ok on vide la table 
       /* $vidange_table="TRUNCATE TABLE ".$nom_table; 

       if($test==0){ 

         $res_vidange=mysql_query($vidange_table); 
         if(!$res_vidange){ 

           return "Erreur lors de la vidange de la table : ".$nom_table; 
         } 
       } 
       */ 
       //Puis on execute les requêtes une par une 
       foreach($requetes_insert as $key=>$une_requete){ 
         if($test==0){ 
           $res_requete=mysql_query($une_requete); 
           if(!$res_requete){ 
             return "Erreur lors de l'execution de la requete num ".$key." : ".$une_requete; 

           } 
         } 

       } 
       return "Importation des ".sizeof($requetes_insert)." requetes reussie"; 
     }else{ 
       return "L'erreur suivante a ete detectee : ".$xml; 
     } 
} 

我想刪除這個空行。謝謝

回答

0

PHP有一個內置的XML解析器,您應該使用而不是嘗試編寫自己的解析器(在遇到格式錯誤的文件結構時,這種解析器可能相當容易出錯)。

有一個whole "book" about this,它可以在PHP手冊(鏈接法文版)中找到。

至於空行:你究竟在哪裏得到空行?你能找出那些空白字符串「出現」的位置嗎?

PS:如果可能的話,在註釋中使用英語。讓人們更容易理解他們。 :)

+0

它使空行,因爲解析器讀取項:一樣,如果他發現,我想探微 cooper

+0

的標籤不要讓'/'可選的,而不是擴大的表達,只抓住完整的標籤,例如像'<$item>(。*?)'。這將是一個非貪婪的匹配,這意味着它將盡可能少地匹配表達式。然後,您可以使用此結果進一步解析(或用子組展開表達式)。 – Mario