我在这里有一点问题,我尝试插入我从选择中得到的所有东西,但它只插入最后一个元素
$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);
答案 0 :(得分: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循环应该可以更好地工作。您只需要找到所有结果元素,然后:单独元素中的order,status等元素。
答案 1 :(得分:0)
将插入语句保留在foreach循环中,您回显数据,因为您保留了最后一条记录,因此只插入了最后一条记录