[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как вытащить из xml ветку с указанным индексом
goodguy
Уже сломал всю голову, перерыл весь гугл, так и не нашел внятного ответа на вопрос.
В общем, есть вот такой XML файл:

<?xml version="1.0" encoding="utf-8" ?>
<data>
<location
title="Храм силы" level="1" >
<division>
<enemy
char_id = "3" health = "70" char_name = "Враг 1 1" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
<enemy
char_id = "1" health = "70" char_name = "Враг 1 2" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
</division>
<division>
<enemy
char_id = "3" health = "200" char_name = "Враг 2 1" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
</division>
<division>
<enemy
char_id = "1" health = "210" char_name = "Враг 2 2" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
</division>
</location>
<location
title="Храм воли" level="2" >
<division>
<enemy
char_id = "3" health = "250" char_name = "Враг 3 1" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
</division>
</location>
<location
title="Храм души" level="3" >
<division>
<enemy
char_id = "3" health = "300" char_name = "Враг 3 2" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
</division>
</location>
<location
title="Просто храм" level="4" >
<division>
<enemy
char_id = "1" health = "400" char_name = "Просто враг" rightLeg = "1" leftArm = "1" rightThigh = "1" head = "1" leftLeg = "1" shoulder = "1" leftFist = "101" skirt = "601" torso = "401" leftFoot = "1" leftForearm = "1" rightFist = "1" rightForearm = "1" rightFoot = "1" leftThigh = "1" rightArm = "1" />
</division>
</location>
</data>


В php скрипте мне нобходимо вытащить из этого XML файл ноду location с указанным индексом, и аз нее вытащить указанную ноду division

Но вот как это сделать?

Сейчас написал такой код:


function getEnemiesDataFromXML($adventure_index, $episode_index) {
$enemies = array();
$xml = simplexml_load_file( 'locations/locations.xml' );
$adventure = $xml->location[$adventure_index];

$episode = $adventure->division[$episode_index];

foreach ($episode->children() as $enemyNode) {
$enemy = new Enemy();
$enemy->health = intval($enemyNode['health']);
array_push($enemies, $enemy);
}
return $enemies;
}

Передал в функцию аргументы 0, 0, и все вроди бы ок. Но как только передал $adventure_index = 1, начались проблемы. С помощью print_r() выяснил что этот код:
$adventure		= $xml->location[$adventure_index];

на самом деле не выбирает ноду location с указанным индексом, а собирает их все, и указание индекса здесь вообще не играет никакой роли.

Так как же быть? Ну не перебирать же все это в цикле, это ведь глупо. Весь смысл DOM теряется. :huh:
Прошу помощи у более продвинутых PHP-шников :unsure:
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.