【问题标题】:Exlpode xml and turn into array分解xml并变成数组
【发布时间】:2016-09-05 11:04:16
【问题描述】:

我想知道如何分解或拆分 xml 并变成数组,然后将其插入数据库。因为我有一个需要每天访问的 api,它会返回 xml。

这是我的 xml 示例:

<ArrayOfUnitPrice>
 <UnitPrice>
  <PriceAmount>1579.7080</PriceAmount>
  <PriceDate>2016-09-02</PriceDate>
  <PriceType>XWZ</PriceType>
 </UnitPrice>
 <UnitPrice>
  <PriceAmount>1028.4137</PriceAmount>
  <PriceDate>2016-09-02</PriceDate>
  <PriceType>ABC</PriceType>
 </UnitPrice>
 ...
</ArrayOfUnitPrice>

我正在使用此代码来提取 xml 响应:

$ch = curl_init("111.222.333.444:8080/code.asmx/Price");
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_POST,1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 60);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
      curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$result=curl_exec ($ch);

//my code here

curl_close($ch);

已解决 我已经用下面的代码解决了我的代码。

$xml = simplexml_load_string($result);

for ($i=0; $i < count($xml) ; $i++) {
  $arr[] = array (
  'PriceAmount' => $xml->UnitPrice[$i]->PriceAmount,
  'PriceDate' => $xml->UnitPrice[$i]->PriceDate,
  'PriceType' => $xml->UnitPrice[$i]->PriceType
  );
}
$data = json_decode(json_encode($arr), true);
$servername   = "localhost";
$username     = "root";
$password     = "";
$dbname       = "dailywork";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if(is_array($data)){
    $check = "SELECT * FROM table_unit";
    if($conn->query($check)->num_rows > 0){
      // my stuff to here :-D
    }else{
      /*Insert data to DB*/
      $sql = "INSERT INTO table_unit (PriceAmount, PriceDate, PriceType) values ";
      $valuesArr = array();
      foreach($data as $row){
          $PriceAmount  = $row[PriceAmount][0];
          $PriceDate    = $row[PriceDate][0];
          $PriceType    = $row[PriceType][0];
          $valuesArr[]  = "('$PriceAmount', '$PriceDate', '$PriceType')";
      }
      $sql .= implode(',', $valuesArr);
      if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
      } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
      }
      /*End Insert data to DB*/
    }
}

$conn->close();

【问题讨论】:

  • 您在使用 SOAP API 吗?
  • @GrzegorzB.yes,没错

标签: php xml database curl


【解决方案1】:

这个函数会给你一个xml数组

function xml2php($xmlcontent) 
{
  $xml_parser = xml_parser_create();
  xml_parse_into_struct($xml_parser, $xmlcontent, $arr_vals);
  xml_parser_free($xml_parser);
  return $arr_vals;
}

像这样传递你的 $result 并检查它

xml2php($result);

如果对你有帮助,请告诉我

【讨论】:

  • 对不起老兄,我无法理解你的代码,所以我使用其他代码来解决它。但非常感谢您的帮助。谢谢@rahul
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多