2017-09-08 48 views
1

XMLファイルを解析するときに問題があります。私はxsi:nil = trueとき私のSQLテーブルにNULLを返したいと思います。これは、XMLファイルの例です:xsi:nil = true(XML)の場合NULLを返す方法

<row> 
    <data>blablabla</data> 
</row> 
<row> 
    <date xsi:nil="true" /> 
</row> 

dateの一部が空である、と私のPHPのforeachループでNULLを返す必要があります。しかし、私は彼らが" "を返すと思う。私のSQLループでデータを読むことができないからだ。

これは私のPHPコードの例です:

foreach ($xml->xpath('//row') as $row) { 
    $date= $row->xpath('./date'); 
    $item['date'] = $date[0]; 
    echo $item['date'].'<br/>'; 

// insert the result in my SQL database // 
$sql = $sq_connexion->prepare("INSERT INTO my_table (date) VALUES (:date)"); 
$sql->execute(array('date' => $item['date'])); 

} 

xsi:nil="true"が表示されたときに、私は私のSQLデータベース、最初dateの値blablablaと値NULLで、持っているしたいと思います。現時点では、この種のコードを、私はこのエラーメッセージを持っている:

PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '' for column 'date' at row 1 

答えて

1

属性をテストして、問題は、あなたが特定の名前空間の属性を取得する必要があるということです。その属性を持つためのテストは少し異なって見えます。私はそれが動作

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$data = "<set xmlns:xsi='http://someurl.com'> 
<row> 
    <date>0000-00-00</date> 
</row> 
<row> 
    <date xsi:nil=\"true\" /> 
</row> 
</set>"; 

$xml = new SimpleXMLElement($data); 
foreach ($xml->xpath('//row') as $row) { 
    $date = $row->date; 
    if (isset($date->attributes('xsi', true)->nil)) { 
     $date = null; 
    } 

    // insert the result in my SQL database // 
    $sql = $sq_connexion->prepare("INSERT INTO my_table (date) VALUES (:date)"); 
    $sql->execute(array('date' => $date)); 
} 
+0

...これはしかし作品を願って、いくつかのテストデータを追加しましたが、データベースのビットでそれをテストすることができていませんでした!どうもありがとう。 –

関連する問題