【问题标题】:PHP Array & XML Can't get all contentPHP Array & XML 无法获取所有内容
【发布时间】:2015-05-01 12:14:18
【问题描述】:

我正在尝试从此 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>';

?>

如果您转到original XML (link),在第 452 行,您将看到:

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

这在my array (link) 中没有显示...

这是我发现缺少的一件事...... 我认为可能还有更多缺失的内容..

为什么?请问怎么解决?

谢谢!!!

【问题讨论】:

    标签: php arrays xml for-loop simplexml


    【解决方案1】:

    您总共只能获得sizeof($xmlbalance-&gt;result-&gt;rowset-&gt;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);
    

    【讨论】:

    • 我需要获取的 xml 比你建议的那些简单的 xml 复杂得多。代码正在运行,但缺少一些内容...我需要帮助找出缺少某些内容的原因。
    • 感谢您的帮助 ;) 我试过了,但代码也不起作用 =( 使用这个新代码,我无法获得技能的描述、技能的等级和所需的技能列表。看:pastebin.com/CD2nSrG5 ...啊,这个 xml 太复杂了,在我看来写得很糟糕:P
    • 非常感谢!!!一切正常!!很不错!感谢您使用 vars 简化代码 ;)
    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多