【问题标题】:XML Processing in PHPPHP 中的 XML 处理
【发布时间】:2016-01-22 19:06:40
【问题描述】:

我需要从 xmlsoccer.com 获取数据 基本上我想读取数据,然后处理 xml,然后将所有数据组织到数据库中。该站点在下面建议此代码。但是,请有人向我解释一下变量 $result 里面有什么,因为当我使用 echo $result; 时没有打印任何内容。我需要处理其中的xml。我对这一切都很陌生,所以请用简单的方法向我解释一下。谢谢大家:)

include("XMLSoccer.php");
try{
    $soccer=new XMLSoccer("your_api_key");
    $soccer->setServiceUrl("http://www.xmlsoccer.com/FootballDataDemo.asmx");
    $result=$soccer->GetFixturesByDateIntervalAndLeague(array("league"=>3,"startDateString"=>"2014-08-01 00:00","endDateString"=>"2014-09-30 00:00"));
    var_dump($result);
}
catch(XMLSoccerException $e){
    echo "XMLSoccerException: ".$e->getMessage();
}

【问题讨论】:

  • 您说当您使用echo $result 时,什么都没有。那么 var_dump 的结果是什么?至少false 我猜?
  • 'echo $result'的结果oi67.tinypic.com/hs5dlj.jpg
  • 所以您正在获取 XML。你不能只在屏幕上echo 并期望它会自动为你很好地格式化。此外,var_dumpecho 之间也存在差异。它们不可互换,您应确保正确说明您使用的是哪个。
  • 是的,当然,但不是仅仅看到它,我想处理它以组织数据,我希望有人向我解释如何做到这一点:)
  • 但是 Justin ... SO 不是您要求人们为您完成工作的地方...您知道数据是 XML 格式的。而且你想从中提取一些数据......那么你为什么不从谷歌开始并在php中搜索xml操作......

标签: php xml


【解决方案1】:

你快到了。您将 XML 作为 XML 对象。

回声

您不能回显对象或数组。您必须先将其转换为字符串。

我通常会将我想看到的内容分配给变量名 $show,然后在适当的地方回显 $show。

$show = var_export($result,true);

或者代替回声

var_export($result,false);

第二个参数(真/假)是你是否想将它分配给一个变量或立即回显它。

XML 到数组

为了简单起见,我更喜欢将对象转换为数组。而且我有工具可以分析数组并为我提供每个数据元素的正确语法。

试试这个代码: XML2array 将对象转换为数组。

XML2array($result,$res);
var_export($res);

添加这个将 XML 对象转换为数组的函数。

function XML2array($obj, &$result) { 
  $data = $obj;
  if (is_object($data)) {
    $data = get_object_vars($data);
  }
  if (is_array($data)) {
    foreach ($data as $key => $value) {
      $res = null;
      XML2array($value, $res);
      if (($key == '@attributes') && ($key)) {
        $result = $res;
      } else {
        $result[$key] = $res;
      }
    }
  } else {
    $result = $data;
  }
}

如果要存储为 JSON,请添加以下代码:

file_put_contents('soccer.jsn',json_encode($res));

更新

他们花了几个小时,但我终于得到了一个 API 密钥。 以上代码不再未经测试。

您的查询匹配 46 条记录 (0-45)

数据的语法是: 其中 $key = 0 到 45

结果语法

$res['Match'][$key]['Id']
$res['Match'][$key]['Date']
$res['Match'][$key]['League']
$res['Match'][$key]['Round']
$res['Match'][$key]['HomeTeam']
$res['Match'][$key]['HomeTeam_Id']
$res['Match'][$key]['HomeGoals']
$res['Match'][$key]['AwayTeam']
$res['Match'][$key]['AwayTeam_Id']
$res['Match'][$key]['AwayGoals']
$res['Match'][$key]['Time']
$res['Match'][$key]['Location']
$res['Match'][$key]['HomeTeamYellowCardDetails']
$res['Match'][$key]['AwayTeamYellowCardDetails']
$res['Match'][$key]['HomeTeamRedCardDetails'] 
$res['Match'][$key]['AwayTeamRedCardDetails']

['Match'] 没有用,所以我会用这个来消除它:

$res = $res['Match'];

$res['Match'][$key]['Id'] 的新语法变为 $res[$key]['Id']

打印程序

然后打印每条记录:

foreach ($res as $key => $array){
  $datetime = date('F j, Y, g:i a',strtotime($res[$key]['Date'] ));
  echo "<p>$key) id:" . $res[$key]['Id'] . ', Date Time:' . "$datetime, League:" . $res[$key]['League'] . ', Round:' . $res[$key]['Round'] . '<br/>Home Team: ' . $res[$key]['HomeTeam'] . ', ' . $res[$key]['HomeTeam_Id'] . ', ' . $res[$key]['HomeGoals'] . '<br/>Away Team: ' . $res[$key]['AwayTeam'] . ', ' . $res[$key]['AwayTeam_Id'] . ', ' . $res[$key]['AwayGoals'] . '<br/>' . $res[$key]['Time'] . ', ' . $res[$key]['Location'] . ', ' . $res[$key]['HomeTeamYellowCardDetails'] . ', ' . $res[$key]['AwayTeamYellowCardDetails'] . ', ' . $res[$key]['HomeTeamRedCardDetails'] . ', ' .$res[$key]['AwayTeamRedCardDetails'] . "<p>\n";
}

链接到示例工作 XML 应用程序

Link to Working XML App

输出示例

0) id:333305,日期时间:2014 年 9 月 27 日,上午 10:00,联赛:苏格兰超级联赛,回合:8 主队:罗斯县, 360, 2 客队:邓迪FC, 522, 1 完成,维多利亚公园,61':格雷厄姆·凯里;90':格雷格·斯图尔特;88':马丁·博伊尔;,,

1) id:333304,日期时间:2014年9月27日,上午10:00,联赛:苏格兰超级联赛,回合:8 主队:马瑟韦尔,47, 0 客队:汉密尔顿,228,4 完成,冷杉公园体育场,65':杰克·雷奇;61':弗雷泽·科尔;19':扎恩·弗朗西斯-安戈尔;14':保罗·劳森;2':斯蒂芬·麦克马纳斯;,58':格兰特·吉莱斯皮;,,

2) id:333303,日期时间:2014年9月27日,上午10:00,联赛:苏格兰超级联赛,回合:8 主队:基尔马诺克,52 岁,3 岁 客队:帕蒂克,561, 0 完成,橄榄球公园,81':克里斯·杜兰;72':杰克·卡罗尔;63':亚伦·穆尔黑德;,,

3) id:333302,日期时间:2014年9月27日,上午10:00,联赛:苏格兰超级联赛,回合:8 主队:邓迪联队,51、2 客队:圣约翰斯通,46, 0 完成,坦纳迪斯公园,90':Callum Morris;66':Nadir Ciftci;,79':David Wotherspoon;,,

$res 数组示例

array (
  0 => 
  array (
    'Id' => '333305',
    'Date' => '2014-09-27T14:00:00+00:00',
    'League' => 'Scottish Premier League',
    'Round' => '8',
    'HomeTeam' => 'Ross County',
    'HomeTeam_Id' => '360',
    'HomeGoals' => '2',
    'AwayTeam' => 'Dundee FC',
    'AwayTeam_Id' => '522',
    'AwayGoals' => '1',
    'Time' => 'Finished',
    'Location' => 'Victoria Park',
    'HomeTeamYellowCardDetails' => '61\': Graham Carey;',
    'AwayTeamYellowCardDetails' => '90\': Greg Stewart;88\': Martin Boyle;',
    'HomeTeamRedCardDetails' => NULL,
    'AwayTeamRedCardDetails' => NULL,
  ),
  1 => 
  array (
    'Id' => '333304',
    'Date' => '2014-09-27T14:00:00+00:00',
    'League' => 'Scottish Premier League',
    'Round' => '8',
    'HomeTeam' => 'Motherwell',
    'HomeTeam_Id' => '47',
    'HomeGoals' => '0',
    'AwayTeam' => 'Hamilton',
    'AwayTeam_Id' => '228',
    'AwayGoals' => '4',
    'Time' => 'Finished',
    'Location' => 'Fir Park Stadium',
    'HomeTeamYellowCardDetails' => '65\': Jack Leitch;61\': Fraser Kerr;19\': Zaine Francis-Angol;14\': Paul Lawson;2\': Stephen McManus;',
    'AwayTeamYellowCardDetails' => '58\': Grant Gillespie;',
    'HomeTeamRedCardDetails' => NULL,
    'AwayTeamRedCardDetails' => NULL,
  ),
  2 => 
  array (
    'Id' => '333303',
    'Date' => '2014-09-27T14:00:00+00:00',
    'League' => 'Scottish Premier League',
    'Round' => '8',
    'HomeTeam' => 'Kilmarnock',
    'HomeTeam_Id' => '52',
    'HomeGoals' => '3',
    'AwayTeam' => 'Partick',
    'AwayTeam_Id' => '561',
    'AwayGoals' => '0',
    'Time' => 'Finished',
    'Location' => 'Rugby Park',
    'HomeTeamYellowCardDetails' => NULL,
    'AwayTeamYellowCardDetails' => '81\': Kris Doolan;72\': Jake Carroll;63\': Aaron Muirhead;',
    'HomeTeamRedCardDetails' => NULL,
    'AwayTeamRedCardDetails' => NULL,
  ),
  3 => 
  array (
    'Id' => '333302',
    'Date' => '2014-09-27T14:00:00+00:00',
    'League' => 'Scottish Premier League',
    'Round' => '8',
    'HomeTeam' => 'Dundee United',
    'HomeTeam_Id' => '51',
    'HomeGoals' => '2',
    'AwayTeam' => 'St Johnstone',
    'AwayTeam_Id' => '46',
    'AwayGoals' => '0',
    'Time' => 'Finished',
    'Location' => 'Tannadice Park',
    'HomeTeamYellowCardDetails' => '90\': Callum Morris;66\': Nadir Ciftci;',
    'AwayTeamYellowCardDetails' => '79\': David Wotherspoon;',
    'HomeTeamRedCardDetails' => NULL,
    'AwayTeamRedCardDetails' => NULL,
  ),

最终代码

$soccer=new XMLSoccer("your_api_key");
$soccer->setServiceUrl("http://www.xmlsoccer.com/FootballDataDemo.asmx");
$result=$soccer->GetFixturesByDateIntervalAndLeague(array("league"=>3,"startDateString"=>"2014-08-01 00:00","endDateString"=>"2014-09-30 00:00"));
XML2array($result,$res);
$res = $res['Match'];
foreach ($res as $key => $array){
  $datetime = date('F j, Y, g:i a',strtotime($array['Date'] ));
  echo "<p>$key) id:" .$array['Id'] . ', Date Time:' . "$datetime, League:" .$array['League'] . ', Round:' .$array['Round'] . '<br/>Home Team: ' .$array['HomeTeam'] . ', ' .$array['HomeTeam_Id'] . ', ' .$array['HomeGoals'] . '<br/>Away Team: ' .$array['AwayTeam'] . ', ' .$array['AwayTeam_Id'] . ', ' .$array['AwayGoals'] . '<br/>' .$array['Time'] . ', ' .$array['Location'] . ', ' .$array['HomeTeamYellowCardDetails'] . ', ' .$array['AwayTeamYellowCardDetails'] . ', ' .$array['HomeTeamRedCardDetails'] . ', ' .$res[$key]['AwayTeamRedCardDetails'] . "<p>\n";
}

echo '<pre>';
var_export($res);
echo '<pre>';
file_put_contents('soccer.jsn',json_encode($res));
}
catch(XMLSoccerException $e){
    echo "XMLSoccerException: ".$e->getMessage();
}
function XML2array($obj, &$result) { 
  $data = $obj;
  if (is_object($data)) {
    $data = get_object_vars($data);
  }
  if (is_array($data)) {
    foreach ($data as $key => $value) {
      $res = null;
      XML2array($value, $res);
      if (($key == '@attributes') && ($key)) {
        $result = $res;
      } else {
        $result[$key] = $res;
      }
    }
  } else {
    $result = $data;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多