PHP数组&;XML Can';我无法获得所有内容


PHP Array & XML Can't get all content

我正在字符串中从该xml获取所有内容:https://api.eveonline.com/eve/SkillTree.xml.aspx

将其保存在MySQL数据库中。

但有一些数据缺失。。。

任何一个懂PHP、Array()和XML的人能帮我吗?

这是我获取内容的代码:

<?php
    $filename = 'https://api.eveonline.com/eve/SkillTree.xml.aspx';
    $xmlbalance = simplexml_load_file($filename);
    $skills = array();
    for ($x=0;$x<sizeOf($xmlbalance->result->rowset->row);$x++) {
         $groupName = $xmlbalance->result->rowset->row[$x]->attributes()->groupName;
         $groupID = $xmlbalance->result->rowset->row[$x]->attributes()->groupID;
         for ($y=0;$y<sizeOf($xmlbalance->result->rowset->row[$x]->rowset->row);$y++) {
             $skills[$x]["skillID"] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->attributes()->typeID;
             $skills[$x]["skillName"] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->attributes()->typeName;            
             $skills[$x]["skillDesc"] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->description;
             $skills[$x]["skillRank"] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->rank;
             $skills[$x]["skillPrimaryAtr"] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->requiredAttributes->primaryAttribute;
             $skills[$x]["skillSecondAtr"] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->requiredAttributes->secondaryAttribute;
             $o = 0;
             for ($z=0;$z<sizeOf($xmlbalance->result->rowset->row[$x]->rowset->row[$y]->rowset->row);$z++) {
                 if ($xmlbalance->result->rowset->row[$x]->rowset->row[$y]->rowset->attributes()->name == "requiredSkills") {
                     $skills[$x]["requiredSkills"]["".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->rowset->row[$z]->attributes()->typeID] = "".$xmlbalance->result->rowset->row[$x]->rowset->row[$y]->rowset->row[$z]->attributes()->skillLevel;
                     $o++;
                 }
             }
         }
    }
     echo '<pre>'; print_r($skills); echo '</pre>';
?>

如果您转到第452行的原始XML(链接),您将看到:

  <row groupName="Spaceship Command" groupID="257">

我的数组(链接)中没有显示。。。

这是我发现的一件缺失的东西。。。我认为这可能也有更多缺失的内容。。

为什么?请问怎么修?

谢谢!!!

您总共只能获得sizeof($xmlbalance->result->rowset->row)条记录。因为,在第二个for循环中,基本上将结果存储在与$skills[$x]相同的数组元素中。

试试这个(我也强烈鼓励你在写代码时尽可能地懒惰——懒惰的意思是,如果可能的话,避免重复/重写相同的代码):

$filename = 'https://api.eveonline.com/eve/SkillTree.xml.aspx';
$xmlbalance = simplexml_load_file($filename);
$skills = array();    
foreach ($xmlbalance->result->rowset->row as $row)
{
    $groupName = $row->attributes()->groupName;
    $groupID = $row->attributes()->groupID;
    foreach ($row->rowset->row as $subRow) 
    {
        $skill['skillID'] = (string) $subRow->attributes()->typeID;
        $skill['skillName'] = (string) $subRow->attributes()->typeName;
        $skill['skillDesc'] = (string) $subRow->description;
        $skill['skillRank'] = (string) $subRow->rank;
        $skill['skillPrimaryAtr'] = (string) $subRow->requiredAttributes->primaryAttribute;
        $skill['skillSecondAtr'] = (string) $subRow->requiredAttributes->secondaryAttribute;
        foreach ($subRow->rowset as $subSubRowset) 
        {
            if ($subSubRowset->attributes()->name == 'requiredSkills') 
            {
                foreach ($subSubRowset->row as $requiredSkill) 
                {
                    $skill['requiredSkills'][(string) $requiredSkill->attributes()->typeID] = (string) $requiredSkill['skillLevel'];
                }
            }
        }
        $skills[] = $skill;
    }
}
print_r($skills);