2012-05-19 2 views
1

Я ищу функцию DOM XML для преобразования PHP массив так:Как преобразовать массив PHP в DOM XML nodeList?

<?php 
$errors = array("A", "B", "C", "D"); 
?> 

к DOM XML NodeList

<?xml version="1.0" standalone="no"?> 
<error> 
    <missing>A</missing> 
    <missing>B</missing> 
    <missing>C</missing> 
    <missing>D</missing> 
</error> 

Большое спасибо за вашу помощь :)

I попробовал следующий код:

<?php 
$basedoc = new DomDocument(); 
$basedoc->Load("Standard.svg"); //Fichier SVG de base 
$baseroot = $basedoc->documentElement; //On prend l'élément racine 
$errorgroup = $basedoc->createElement('error'); //On crée le groupe de base 
foreach($erreurs as $erreur) { 
    $missinggroup = $errorgroup->createElement('missing'); //On crée le groupe de base 
    $errorgroup->appendChild($missinggroup); 
} 
$baseroot->appendChild($errorgroup); 
?> 
+1

[? Что вы пробовали] (http://mattgemmell.com/2008/12/ 08/what-have-you-try /) – DaveRandom

+0

И что не работает? – Gordon

+0

В моем XML пуст, но мой массив не пуст. – Zorkzyd

ответ

0

Вы не не использовать $erreur в коде создания так очевидно, он не будет в результате XML. Кроме того, вы не можете создать элемент из DOMElement, но должны создать его с DOMDocument. Ваш код даст Fatal Error.

Изменить

$missinggroup = $errorgroup->createElement('missing'); 

в

$missinggroup = $basedoc->createElement('missing', $erreur); 

, а затем он будет работать: http://codepad.org/GmCIBIQW

+1

Большое спасибо Gordon! Это именно то, что мне нужно! – Zorkzyd

0

Я думаю, что это слишком просто структуры для использования функций DomXML. Я думаю, вы должны создать простой шаблон представления для этого XML - это будет выглядеть примерно так:

<?xml version="1.0" standalone="no"?> 
<error> 
    <?php foreach ($errors as $error):?> 
     <missing><?php echo $error;?></missing> 
    <?php endforeach;?> 
</error> 

Точная структура шаблона конечно, зависит от вашей структуры - в Зенде это будет $ this-> ошибки вместо из $ ошибок, например.

Od использовать SimpleXML как sugested @ bassem-ala в первой ссылке.

UPDATE

Вот 'рекурсивным' функция для генерации XML, основанный на таблице. Что-то вроде этого

function generateXMLElement($elements, $rootNode = null, $rootNodeName = 'xml') 
{ 
    if (!$rootNode) 
    { 
     $rootNode = new SimpleXMLElement('<'.$rootNodeName.'/>'); 
    } 
    foreach ($elements as $key => $val) 
    { 
     if (is_array($val)) 
     { 
      $childElem = $rootNode->addChild($key); 
      generateXMLElement($val, $childElem); 
     } 
     else 
     { 
      $childElem = $rootNode->addChild($key, $val); 
     } 
    } 
    return $rootNode; 
} 

Вы получаете XML с помощью $xml = generateXMLElement($errors, null, 'error'); , то вы можете распечатать его с помощью print($xml->asXML());

+0

Спасибо за ваш ответ Thomasz, но решение Гордона мне легче понять и применить :) – Zorkzyd

+0

Я полагаю, что без проблем –