【发布时间】:2018-02-08 12:11:57
【问题描述】:
首先,我有一个来自 unibet.com 的 xml 提要,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<betOfferResponse>
<events>
<name>Red Star Belgrade - CSKA Moscow</name>
<homeName>Red Star Belgrade</homeName>
<awayName>CSKA Moscow</awayName>
<start>2018-02-13T17:00Z</start>
<group>Europa League</group>
<type>ET_MATCH</type>
<sport>FOOTBALL</sport>
<state>NOT_STARTED</state>
<liveBetOffers>true</liveBetOffers>
<openForLiveBetting>false</openForLiveBetting>
<id>1004394826</id>
<groupId>2000051195</groupId>
<path>
<id>1000093190</id>
<name>Football</name>
<englishName>Football</englishName>
</path>
<path>
<id>2000051195</id>
<name>Europa League</name>
<englishName>Europa League</englishName>
</path>
</events>
<events>
<name>FC Astana - Sporting Lisbon</name>
<homeName>FC Astana</homeName>
<awayName>Sporting Lisbon</awayName>
<start>2018-02-15T16:00Z</start>
<group>Europa League</group>
<type>ET_MATCH</type>
<sport>FOOTBALL</sport>
<state>NOT_STARTED</state>
<liveBetOffers>true</liveBetOffers>
<openForLiveBetting>false</openForLiveBetting>
<id>1004394832</id>
<groupId>2000051195</groupId>
<path>
<id>1000093190</id>
<name>Football</name>
<englishName>Football</englishName>
</path>
<path>
<id>2000051195</id>
<name>Europa League</name>
<englishName>Europa League</englishName>
</path>
</events>
但是当我使用我的脚本读取 xml 数据并将其放入我的数据库时,它不起作用,因为这些:
<betOfferResponse>
但是当我创建自己的 xml 时只使用下面的数据,它就可以工作。但它不能循环文件并获取第二个条目等等..
这是我的 php 代码:
<?php
$xml=simplexml_load_file("test.xml") or die("Error: Cannot create object");
$connection = mysqli_connect("localhost", "root", "password", "tipstr") or die ("ERROR: Cannot connect");
/* Assumes that the number of IDs = number of customers */
$size = sizeOf($xml->id);
$i = 0; //index
/* Add each customer to the database, See how we reference it as $xml->ENTITY[INDEX] */
while($i != $size)
{
print_r($xml);
echo $xml->id[$i]; //Test
$sql = "INSERT INTO xf_nflj_sportsbook_event (event_id, category_id, user_id, username, title, description, event_status, date_create, date_open, date_close, date_settle, date_edit, event_timezone, wagers_placed, amount_staked, amount_paidout, likes, like_users, view_count, outcome_count, comment_count, thread_id, prefix_id, last_comment_date, limit_wagers_single_outcome) VALUES ('$xml->id',2,1,'tipstr', '$xml->name', '$xml->sport', 'open', 1517755596,1517755596,1517761200,1517761200,0,'Europe/London', 0, 0,0,0,0,0,0,0,0,0,0,0)";
mysqli_query($connection, $sql) or die ("ERROR: " .mysqli_error($connection) . " (query was $sql)");
$i++; //increment index
}
mysqli_close($connection);
我做错了什么?如何循环/foreach 插入查询,以便它可以获取整个文件而不仅仅是第一个文件,以及如何让它从 unibet 读取 xml?
编辑: 很抱歉没有添加我成功时使用的 xml。但这里是:
<events>
<name>Marseille - S.C. Braga</name>
<homeName>Marseille</homeName>
<awayName>S.C. Braga</awayName>
<start>2018-02-15T18:00Z</start>
<group>Europa League</group>
<type>ET_MATCH</type>
<sport>FOOTBALL</sport>
<state>NOT_STARTED</state>
<liveBetOffers>true</liveBetOffers>
<openForLiveBetting>false</openForLiveBetting>
<id>1004394835</id>
<groupId>2000051195</groupId>
<path>
<id>1000093190</id>
<name>Football</name>
<englishName>Football</englishName>
</path>
<path>
<id>2000051195</id>
<name>Europa League</name>
<englishName>Europa League</englishName>
</path>
</events>
<betoffers>
<id>2086105579</id>
<eventId>1004044027</eventId>
<closed>2018-05-16T18:45Z</closed>
<live>false</live>
<startingPrice>false</startingPrice>
<criterion>
<id>1001221607</id>
<label>Winner</label>
</criterion>
<betOfferType>
<id>4</id>
<name>Winner</name>
</betOfferType>
<outcomes>
<id>2307553711</id>
<odds>15000</odds>
<label>AC Milan</label>
<type>OT_UNTYPED</type>
<changedDate>2018-02-05T22:19:04Z</changedDate>
<oddsFractional>14/1</oddsFractional>
<oddsAmerican>1400</oddsAmerican>
</outcomes>
<outcomes>
<id>2307553715</id>
<odds>7000</odds>
<label>Arsenal</label>
<type>OT_UNTYPED</type>
<changedDate>2018-02-05T22:19:04Z</changedDate>
<oddsFractional>6/1</oddsFractional>
<oddsAmerican>600</oddsAmerican>
</outcomes>
我没有收到任何特殊错误,当我在 xml 中添加更多项目时,只有我写入的 php 错误。所以尝试检查控制台中的网络选项卡,但也没有。
【问题讨论】:
-
“它不起作用”不是问题描述。为什么它不起作用?你有错误吗?出乎意料的结果?
-
“但是当我创建自己的 xml 时只使用下面的数据” - 我很好奇你自己构建的 XML 会是什么样子,如果它真的与该代码一起工作的话?对于初学者:
id低了几个级别,所以我根本看不出$xml->id将如何工作,除非您完全更改了 XML 结构。您还获取$xml->name和$xml->sport,它们位于不同的级别。 -
下面是一个正确遍历 XML 对象的示例:stackoverflow.com/questions/871422/…
-
MySQL 支持批量插入。这里不需要为每个插入执行语句。使用循环构建大型插入语句或文件,然后使用它来插入数据。 (速度更快)