2016-12-23 15 views
1

Я создал многомерный массив, используя fgetcsv из файла CSV.PHP Array to XML

Использование DOMDocument и SimpleXML Я пытаюсь создать XML-файл CSV-документа.

Массив и переменные XML передаются функции в одном файле класса. XML-документ создается без каких-либо проблем, но значение не передается из массива в XML. Он работает, я использую статическое значение, противоположное передаче значения из массива, также, если я печатаю_r массив, структура и значения верны.

Я пробовал 'htmlspecialcharacters' и 'encode_UTF8' перед передачей значения в XML.

Ниже приведен пример кода, продукт представляет собой многомерный массив.

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 выглядел? Вы не вкладываете ничего в элемент «Продукт». – Barmar

+1

Вам не нужно использовать 'htmlspecialchars', при необходимости библиотека будет делать кодировку. – Barmar

+1

Вы уверены, что идентификатор должен быть отдельным элементом, а не атрибутом 'Product', например' '? – Barmar

ответ

1

Пара вещей выделяются. Во-первых, у вас есть синтаксические ошибки на этой линии:..

$element = $xml->createElement("ID", ($row[38])); (обратите внимание на странствующих скобки вокруг $row[38] Метод createElement принимает строку для второго параметра

Во-вторых, вы не добавляя идентификатор к продукт, но в корневой 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

Спасибо за комментарий Дерек, но он не меняет значение. В этом случае атрибут «id» по-прежнему равен нулю. Хотя я знаю, что массив имеет значение, которое я могу проверить с помощью print_r. Ниже приведен пример массива: – pommi