解析XML文件时遇到问题。我希望在xsi:nil = true
时在我的SQL表中返回NULL。这是XML文件的一个示例:
<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']));
}
我想在我的SQL数据库中显示第一个blablabla
的值date
和显示NULL
时的值xsi:nil="true"
。目前,有了这种代码,我有这样的错误信息:
PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '' for column 'date' at row 1
答案 0 :(得分: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));
}