-3

我在这里有一个小问题,我尝试插入我从选择中获得的所有内容,但它只插入最后一个元素

$dom = new DomDocument;
$dom->load("ResultatTestSuite.xml");

// retrieve elements by tagname
/************************************   ******************************/
$order = $dom->getElementsByTagName('order');
foreach($order as $a )
  echo $a->firstChild->nodeValue . "<br />";
echo "---<br />";

$status = $dom->getElementsByTagName('status');
foreach($status as $b)
  echo $b->firstChild->nodeValue . "<br />";
echo "---<br />";

$message = $dom->getElementsByTagName('message');
foreach($message as $c)
  echo $c->firstChild->nodeValue . "<br />";
echo "---<br />";   

$timeTaken = $dom->getElementsByTagName('timeTaken');
foreach($timeTaken as $d)
  echo $d->firstChild->nodeValue . "<br />";


/************************************   ******************************/
// database configuration

$host = "-----";
$user = "-----";
$passwd = "----";
$bdd = "-----";

$connect = mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur $host");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");


$query2 = "INSERT INTO xml VALUES('$a->textContent','$b->textContent','$c->textContent','$d->textContent')";
$result2 = mysql_query($query2);
4

2 回答 2

0

你只需要用{}. 在您的代码中,仅echo $d->firstChild->nodeValue . "<br />";作为foreach语句的一部分执行。

/************************************   ******************************/
//info base de données 

$host = "-----";
$user = "-----";
$passwd = "----";
$bdd = "-----";

$connect = mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur $host");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

$dom = new DomDocument;
$dom->load("ResultatTestSuite.xml");

//recuperation des elements par rapport au nom de la balise
/************************************   ******************************/
$order = $dom->getElementsByTagName('order');
foreach($order as $a ) {
   echo $a->firstChild->nodeValue . "<br />";
   echo "---<br />";

   $status = $dom->getElementsByTagName('status');
   foreach($status as $b) { 
      echo $b->firstChild->nodeValue . "<br />";
      echo "---<br />";

      $message = $dom->getElementsByTagName('message');
      foreach($message as $c) {
         echo $c->firstChild->nodeValue . "<br />";
         echo "---<br />";   

         $timeTaken = $dom->getElementsByTagName('timeTaken');
         foreach($timeTaken as $d) {
            echo $d->firstChild->nodeValue . "<br />";

            $query2 = "INSERT INTO xml VALUES('" . mysql_real_escape_string($a->textContent) . "','" . mysql_real_escape_string($b->textContent) ."','" . mysql_real_escape_string($c->textContent) . "','" . mysql_real_escape_string($d->textContent) . "')";
            $result2 = mysql_query($query2);
         }
      }
   }
}

编辑:

请注意,如果您'尝试插入某些值,您的代码可能会失败。该符号必须转义。您可以使用mysql_real_escape_string函数(上面我的代码中的链接)。它将转义可能会破坏您的查询的符号并防止 sql 注入。但请注意链接页面上的警告。mysql_* 函数已弃用。

$results = $dom->getElementsByTagName('result');
foreach($results as $res) {
    $order = $res->getElementsByTagName('order');
    foreach($order as $a ) {
       echo $a->firstChild->nodeValue . "<br />";
       echo "---<br />";

       $status = $res->getElementsByTagName('status');
       foreach($status as $b) { 
          echo $b->firstChild->nodeValue . "<br />";
          echo "---<br />";

          $message = $res->getElementsByTagName('message');
          foreach($message as $c) {
             echo $c->firstChild->nodeValue . "<br />";
             echo "---<br />";   

             $timeTaken = $res->getElementsByTagName('timeTaken');
             foreach($timeTaken as $d) {
                echo $d->firstChild->nodeValue . "<br />";

                $query2 = "INSERT INTO xml VALUES('" . mysql_real_escape_string($a->textContent) . "','" . mysql_real_escape_string($b->textContent) ."','" . mysql_real_escape_string($c->textContent) . "','" . mysql_real_escape_string($d->textContent) . "')";
                $result2 = mysql_query($query2);
             }
          }
       }
    }
}

如果我正确理解 XML 的结构,上面的 foreach 循环应该会更好。您只需要找到所有结果元素,然后在单独的元素中找到:订单、状态等元素。

于 2013-06-04T12:04:37.107 回答
0

将插入语句保留在 foreach 循环中,在该循环中回显数据,因为您将其保留在末尾,因此仅插入了最后一条记录

于 2013-06-04T12:06:58.673 回答