Вы можете использовать $ this-> xml-> children (), чтобы получить дочерние узлы, а затем использовать это рекурсивно. Недавно я написал метод для рекурсивного копирования одного блока XML в другой, который должен показать вам методы, которые вы можете использовать.
protected function copyXml(SimpleXMLElement $from, SimpleXMLElement $to)
{
// Create a new branch in the target, as per the source
$fromValue = (string) $from;
if ($fromValue)
{
$toChild = $to->addChild($from->getName(), (string) $from);
}
else
{
$toChild = $to->addChild($from->getName());
}
// Copy attributes across
foreach ($from->attributes() as $name => $value)
{
$toChild->addAttribute($name, $value);
}
// Copy any children across, recursively
foreach ($from->children() as $fromChild)
{
$this->copyXml($fromChild, $toChild);
}
}
НТН.