SimpleXML: получить дочерние узлы

<?xml version="1.0" encoding="utf-8" ?> <items> <aaa> </aaa> <aaa> </aaa> <aaa> <bbb> </bbb> <bbb> </bbb> <bbb> <ccc> Only this childnod what I need </ccc> <ccc> And this one </ccc> </bbb> </aaa> </items> 

Я хочу разобрать XML, как указано выше, с PHP. Я не знаю, как получить эти два дочерних узла.

Когда я использую приведенный ниже код, он вызывает ошибку: Warning: main() [function.main]: Cannot add element bbb number 2 when only 0 such elements exist in

 <?php header('Content-type:text/html; charset=utf-8'); $xml = simplexml_load_file('2.xml'); foreach ($xml->aaa[2]->bbb as $bbb){ echo $bbb[2]->$ccc; // wrong in here echo $bbb[3]->$ccc; } ?> 

Solutions Collecting From Web of "SimpleXML: получить дочерние узлы"

Я не знаю, как использовать возврат simplexml, но из того, что я видел из вашего кода, это должно работать:

 <?php header('Content-type:text/html; charset=utf-8'); $xml = simplexml_load_file('2.xml'); echo $xml->aaa[2]->bbb[2]->ccc[0]; echo $xml->aaa[2]->bbb[2]->ccc[1]; ?> 

Использовать xpath

 $ccc = $xml->xpath('aaa/bbb/ccc'); foreach($ccc as $c){ echo (string)$c."<br/>"; } 

Результат:

 Only this childnod what I need And this one 

Кроме того, в вашей первоначальной попытке $bbb[3] не имеет смысла, потому что у вас есть только три элемента, начиная с индекса 0.

Более динамичное решение

 <?php header('Content-type:text/html; charset=utf-8'); $xml = simplexml_load_file('2.xml'); foreach ($xml->aaa as $aaa){ if ($aaa->bbb) { foreach ($aaa->bbb as $bbb) { if ($bbb->ccc) foreach ($bbb->ccc as $ccc) { echo $ccc; } } } } } ?>