PHP XML 从 URL 解析以获取元素计数


PHP XML from a URL Parsing to get a count of elements

我正在尝试处理来自网站API的一些XML输出,并简单地获取响应计数。 出于某种原因,我被困住了。

XML 数据https://zkillboard.com/api/losses/allianceID/99005942/no-items/no-attackers/shipTypeID/609/pastSeconds/604800/xml/

我想做的是让 PHP 通过其 URL 解析 XML 并返回它返回的 <row> 个元素的计数,比如"8"我不知道为什么我遇到这样的困难。

我已经在这里尝试了一些建议,但我弄错了。我正在使用这个片段,但没有运气。

    <?php
$url='https://zkillboard.com/api/losses/allianceID/99005942/no-items/no-attackers/shipTypeID/609/pastSeconds/604800/xml/';
$elem=new SimpleXMLElement($url, NULL, TRUE);
foreach ($elem as $rowset)
  {
  printf("%s has %d children.<br>", $rowset['kills'], $rowset->count());
  }
?>

它输出:

has 0 children.
has 1 children.
has 0 children.

似乎没有 3 个"行集",所以不确定为什么这是迭代 3 次并且计数关闭。

这是 XML

<eveapi version="2" zkbapi="1">
<currentTime>2016-02-03 13:26:55</currentTime>
<result>
<rowset name="kills" key="killID" columns="killID,solarSystemID,killTime,moonID">
<row killID="51763242" solarSystemID="30003951" killTime="2016-02-01 21:25:35" moonID="0">
<victim characterID="1737017947" characterName="Ma Tun" corporationID="916251988" corporationName="Lonetrek Blacksoul Federation" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="1975" shipTypeID="609"/>
</row>
<row killID="51747433" solarSystemID="30004754" killTime="2016-01-31 23:40:49" moonID="0">
<victim characterID="94366852" characterName="Bacon forAllah" corporationID="1102238026" corporationName="LazyBoyz Band of Recreational Flyers" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="2490" shipTypeID="609"/>
</row>
<row killID="51706013" solarSystemID="30004616" killTime="2016-01-30 16:11:14" moonID="0">
<victim characterID="93328027" characterName="GoginCZ" corporationID="803493697" corporationName="Bohemian Veterans" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="3790" shipTypeID="609"/>
</row>
<row killID="51704220" solarSystemID="30004755" killTime="2016-01-30 14:42:09" moonID="0">
<victim characterID="1891723276" characterName="Taur Kizandor" corporationID="728517421" corporationName="0.0 Massive Dynamic" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="1286" shipTypeID="609"/>
</row>
<row killID="51687964" solarSystemID="30004023" killTime="2016-01-29 20:44:28" moonID="0">
<victim characterID="94272496" characterName="Ding Bang Oww" corporationID="916251988" corporationName="Lonetrek Blacksoul Federation" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="2587" shipTypeID="609"/>
</row>
<row killID="51663835" solarSystemID="30004710" killTime="2016-01-28 15:03:36" moonID="0">
<victim characterID="94044078" characterName="Lortar Ogarr" corporationID="872886764" corporationName="Exanimo Inc" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="1308" shipTypeID="609"/>
</row>
<row killID="51656679" solarSystemID="30004738" killTime="2016-01-28 01:43:19" moonID="0">
<victim characterID="1891723276" characterName="Taur Kizandor" corporationID="728517421" corporationName="0.0 Massive Dynamic" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="1540" shipTypeID="609"/>
</row>
<row killID="51653821" solarSystemID="30004019" killTime="2016-01-27 22:32:50" moonID="0">
<victim characterID="90345974" characterName="Serrit Kaldan" corporationID="98079566" corporationName="101st Cliffdiving Regiment" allianceID="99005942" allianceName="Northern Army" factionID="0" factionName="" damageTaken="2397" shipTypeID="609"/>
</row>
</rowset>
</result>
<cachedUntil>2016-02-03 14:26:55</cachedUntil>
</eveapi>

您是否尝试过使用

$elem=new SimpleXMLElement($url, 0, true);

第三个参数告诉构造函数,$data(第一个参数)是一个 URL,而不是包含 XML 的字符串。

然后,您可以通过以下方式打印row元素的数量

print "Number of rows: " . $elem->result->rowset->row->count();