Ben ardışık bir dizi için bir PHP SimpleXMLObject döküm gerekir. Sorun, her bir alt elemanı, bir PHP SimpleXMLElement olmasıdır.
Bu mümkün mü?
Bu bir test ama bu onu halletmek gibi görünüyor değil mi:
function convertXmlObjToArr($obj, &$arr)
{
$children = $obj->children();
foreach ($children as $elementName => $node)
{
$nextIdx = count($arr);
$arr[$nextIdx] = array();
$arr[$nextIdx]['@name'] = strtolower((string)$elementName);
$arr[$nextIdx]['@attributes'] = array();
$attributes = $node->attributes();
foreach ($attributes as $attributeName => $attributeValue)
{
$attribName = strtolower(trim((string)$attributeName));
$attribVal = trim((string)$attributeValue);
$arr[$nextIdx]['@attributes'][$attribName] = $attribVal;
}
$text = (string)$node;
$text = trim($text);
if (strlen($text) > 0)
{
$arr[$nextIdx]['@text'] = $text;
}
$arr[$nextIdx]['@children'] = array();
convertXmlObjToArr($node, $arr[$nextIdx]['@children']);
}
return;
}
Mümkündür. Bu ana unsurların etiketleri ve daha fazla çocuk sahibi elemanların etiketlerini + içeriğini yazdırır tekrarlanan bir fonksiyon. Bir dizi oluşturmak için değiştirebilirsiniz:
foreach( $simpleXmlObject as $element )
{
recurse( $element );
}
function recurse( $parent )
{
echo '<' . $parent->getName() . '>' . "\n";
foreach( $parent->children() as $child )
{
if( count( $child->children() ) > 0 )
{
recurse( $child );
}
else
{
echo'<' . $child->getName() . '>';
echo iconv( 'UTF-8', 'ISO-8859-1', $child );
echo '</' . $child->getName() . '>' . "\n";
}
}
echo'</' . $parent->getName() . '>' . "\n";
}
SimpleXMLObject zaten sadece diziler gibi davranmıştır olabilir çünkü ben nokta görmüyorum ...
Ama gerçekten sadece bir forumda this thread veya this post içinde Chassagnette cevabını kontrol, ihtiyacınız varsa.