2016-07-06 44 views
0

我想爲具有多個字段的數組生成XML,並且我想將這些字段設置爲單個XML元素,因爲下面的元素屬性是我的PHP代碼。如何在PHP foreach中傳遞XML setAttribute

<?php 
$rs=array();//values come in $rs from database, it has many fields 
$doc = new DOMDocument(); 
$doc->formatOutput = true; 
$root = $doc->createElement("slides"); 
$doc->appendChild($root); 
$firstchild = $doc->createElement("device"); 
$fs=$doc->appendChild($firstchild); 
foreach($rs as $key=>$value){   
    $fs->setAttribute($key,$value); 
} 
$xml_string = $doc->saveXML(); 
echo $xml_string; 

但是這不是我的工作,它給了我這樣的錯誤:

一個DOMElement:的setAttribute()預計參數2爲字符串,數組給定

我的$ RS陣列結構是這樣的:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => dfd 
      [width] => 2 
      [height] => 1 
      [resolution] => 
      [space] => 
     ) 

) 

,我想輸出,如:

<slides> 
    <device id="12" name="mydevice" color="red" .....and so on></device> 
</slides> 
+0

刪除'$ doc->的appendChild($ FS);'後的foreach – splash58

+0

https://eval.in/601047 - – splash58

+0

仍面臨着同樣的錯誤「一個DOMElement: setAttribute()期望參數2是字符串,數組給出「 –

回答

1

你做了一些錯誤,主要他們的你使用appendChild元件到文檔而不是父

$doc = new DOMDocument(); 
$doc->formatOutput = true; 

$root = $doc->createElement("slides"); 
$doc->appendChild($root); 

$fs = $doc->createElement("device"); 
$root->appendChild($fs); 

foreach($rs as $key=>$value){   
    $fs->setAttribute($key,$value); 
} 

$xml_string = $doc->saveXML(); 
echo $xml_string; 

working example

+0

仍然面臨同樣的問題:DOMElement:setAttribute()期望參數2是字符串,數組給出 –

+0

顯示數組'rs'結構 – splash58

+0

檢查更新了一個 –

0

您需要創建每個屬性並將其分配給正確的節點,這樣的事情:

foreach($rs as $key => $value){ 
    $attrib=$doc->createAttribute($key); 
    $attrib->nodeValue=$value; 
    $fs->appendChild($attrib);  
} 
+0

它給了我無效字符錯誤 –

0

$ rs變量是以字段數組作爲元素的記錄數組。所以你需要兩個嵌套循環。

外層循環迭代記錄併爲每條記錄創建一個device元素節點。內部循環迭代字段並添加屬性。

$rs = [ 
    [ 
    'id' => 1, 
    'name' => 'dfd', 
    'width' => 2, 
    'height' => 1, 
    'resolution' => '', 
    'space' => '' 
    ] 
]; 

$document = new DOMDocument(); 

$slides = $document->appendChild(
    $document->createElement("slides") 
); 

foreach ($rs as $record) { 
    $device = $slides->appendChild(
    $document->createElement("device") 
); 
    foreach($record as $key => $value){   
    $device->setAttribute($key,$value); 
    } 
} 

$document->formatOutput = true; 
echo $document->saveXML(); 

輸出:

<?xml version="1.0"?> 
<slides> 
    <device id="1" name="dfd" width="2" height="1" resolution="" space=""/> 
</slides>