【问题标题】:How to return NULL if xsi:nil = true (XML)如果 xsi:nil = true (XML),如何返回 NULL
【发布时间】:2017-09-08 15:35:49
【问题描述】:

我在解析 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 数据库中,第一个 date 的值 blablabla 和显示 xsi:nil="true" 时的值 NULL。目前,使用这种代码,我有这个错误消息:

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

【问题讨论】:

    标签: php mysql xml parsing


    【解决方案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));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2021-02-07
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多