2012-05-19 33 views
1

我正在尋找一個DOM XML函數PHP數組轉換是這樣的:如何將PHP數組轉換爲DOM XML nodeList?

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

到XML DOM節點列表

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

非常感謝您的幫助:)

我試了下面的代碼:

<?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-you-you-tried /) – DaveRandom

+0

什麼不工作? – Gordon

+0

在我的XML中是空的,但我的數組不是空的。 – Zorkzyd

回答

0

在創建代碼你是不是不使用$erreur任何地方,所以顯然它不會是在生成的XML打印獲取XML。另外,您不能從DOMElement創建元素,但必須從DOMDocument創建元素。你的代碼將會發生致命錯誤。

變化

$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> 

課程的確切模板結構取決於你的框架 - 在Zend中這將是$這個 - >錯誤,而不是例如$錯誤。

使用SimpleXML作爲@ 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 = generateXMLElement($errors, null, 'error'); 那麼你可以使用print($xml->asXML());

+0

謝謝你的回答Thomasz,但戈登的解決方案更容易理解和應用:) – Zorkzyd

+0

我想,沒問題 –