2016-12-23 85 views
1

我已經使用CSV文件中的fgetcsv創建了多維數組。將PHP數組轉換爲XML

同時使用DOMDocument和SimpleXML我想創建一個CSV文檔的XML文件。

數組和XML變量被傳遞給同一個類文件中的函數。正在創建XML文檔沒有任何問題,但沒有值從數組傳遞到XML。它確實有效它我使用一個靜態值,而不是從數組中傳遞一個值,同樣如果我print_r數組,結構和值都是正確的。

在將值傳遞給XML之前,我嘗試過'htmlspecialcharacters'和'encode_UTF8'。

代碼示例如下,product是多維數組。

public function array_to_xml($product, &$xml) 
{ 

    foreach($product as $row) 
    {  
     $element = $xml->createElement("Product"); 
     $xml->appendChild($element); 

     $element = $xml->createElement("ID", ($row[38])); 
     $xml->appendChild($element); 
    } 
} 

問題很明顯,與數組,但我找不到答案。任何幫助將不勝感激。

輸出目前看起來像(在ID元素中沒有值)。一旦它工作產品將有大約20個子元素。當打印到屏幕$行的

<?xml version="1.0"?> 
    <ProductList/> 
     <Product> 
      <ID/> 
     </Product> 
    </ProductList> 

例子:

Array ([0] => [1] => [2] => 6/10/2016 [3] => [4] => [5] => 7.35 [6] => N [7] => N [8] => N [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 80 [15] => 0 [16] => 80 [17] => 0 [18] => 80 [19] => N [20] => N [21] => N [22] => N [23] => 236.50 [24] => 0.00 [25] => 4.86 [26] => AFG Home Loans - Alpha [27] => 100% Offset Lo Doc Fixed [28] => 100% Offset Lo Doc 4 Year Fixed Owner Occupied [29] => 250.00 [30] => [31] => 7.35 [32] => 0.00 [33] => 4.9 [34] => N [35] => 325.00 [36] => 48 [37] => 4.52 [38] => 1-1MX78TF [39] => N [40] => [41] => [42] => N [43] => N [44] => [45] => Y [46] => 0.00 [47] => 10,000.00 [48] => 2,000,000.00 [49] => Y [50] => 30 [51] => [52] => [53] => Y [54] => 0.00) 
+0

你想得到的XML看起來像什麼?你不會把任何東西放到'Product'元素中。 – Barmar

+1

你不需要使用'htmlspecialchars',這個庫會在需要的時候爲你編碼。 – Barmar

+1

你確定ID應該是一個單獨的元素,而不是'Product'的屬性,比如''? – Barmar

回答

1

有兩件事情中脫穎而出。首先,你必須在這條線上有語法錯誤:。

$element = $xml->createElement("ID", ($row[38]));(注意周圍$row[38]出錯的括號內的createElement方法需要爲它的第二個參數的String

其次,你不添加ID到產品,而是根XML。固定的是,你的代碼看起來應該接近這個。

public function array_to_xml($product, &$xml) 
{ 
    foreach ($product as $row) 
    {  
     $product= $xml->createElement("Product"); 
     $id = $xml->createElement("ID", $row[38]); 

     $product->appendChild($id); 
     $xml->appendChild($product); 
    } 
} 

如果你需要它作爲@Barmar評論的屬性,你會使用DOMElement->setAttribute()方法,並且它看起來如:

public function array_to_xml($product, &$xml) 
{ 
    foreach ($product as $row) 
    {  
     $product= $xml->createElement("Product"); 
     $product->setAttribute('ID', $row[38]); 

     $xml->appendChild($product); 
    } 
} 
+0

感謝Derek的評論,但它並沒有改變價值。在這種情況下,屬性「id」仍然爲空。雖然我知道數組持有一個值,我可以用print_r來檢查。數組的一個例子如下: – pommi