PHP Array & XML Не удается получить весь контент

0

Я хочу получить весь контент из этого 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>';

?>

Если вы перейдете к исходному XML (link), в строке 452 вы увидите:

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

И это не шоу в моем массиве (ссылка)...

Это одно, что я обнаружил, что этого не хватает... Я думаю, что, вероятно, есть больше контента, который тоже отсутствует.

Зачем? Как это исправить, пожалуйста?

Спасибо!!!

Теги:
arrays
for-loop
simplexml

1 ответ

1
Лучший ответ

Вы получите только число sizeof($xmlbalance->result->rowset->row). Потому, что в вашем 2 - е 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);
  • 0
    XML, который мне нужно получить, гораздо сложнее, чем те простые XML-вопросы, о которых вы говорили. Код работает, но в нем отсутствует какой-то контент ... Мне нужна помощь, чтобы выяснить, почему отсутствует какой-то контент.
  • 0
    Спасибо за вашу помощь;) Я пытался, но код тоже не работает = (С этим новым кодом я не могу получить Desc навыка, рейтинг навыка и список необходимых навыков. Смотрите: pastebin.com/CD2nSrG5 . .. Аааа, этот xml такой сложный и по моему мнению очень плохо написан: P
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню