Еще одна проблема преобразования PHP-XML в CSV с помощью fputcsv

Мне нужна помощь по проблеме: я конвертирую XML в CSV с помощью PHP-скрипта, но у меня с этим проблема, они являются свойствами в свойствах.

Это файловая структура XML:

<Products>
 <Product>
   <Name>
     SomeProductName
   </Name>
   <Colour>
     Black
   </Colour>
  <Features>
   <Feature_0>
     this is feature 0
   </Feature_0>
   <Feature_1>
     this is feature 1
   </Feature_1>
   <Feature_2>
     this is feature 1
   </Feature_2>
  </Features>
 <Product>
</Product>

и это мой сценарий:

{$filexml='product.xml';
if (file_exists($filexml)) {
  $xml = simplexml_load_file($filexml);
  $f = fopen('product.csv', 'w');
foreach($xml->Products->Product as $product) {    
  $values = array(
   "Name" => $product->Name, 
   "Colour" => $product->Colour, 
   "Features" => $product->Features);
   fputcsv($f, $values,',','"');
  }
fclose($f);
}

с этим скриптом я получаю только Feature_0, и мне нужно получить все эти функции в моем CSV-файле. Любая помощь будет оценена.

Заранее спасибо!


person Dodi Nih    schedule 09.02.2014    source источник


Ответы (1)


CSV не очень подходит для таких вложенных данных.

Либо вам придется создать два файла csv: prodcuts.csv и features.csv, где записи из features.csv указывают на записи в products.csv, как в реляционной базе данных, либо вам придется свести список функций в одну строку, чтобы CSV выглядел так: :

"product_name", "product_color", "features"
"SomeProductName", "Black", "this is feature 0|this is feature 1|this is feature 2"
"AnotherProductName", "White", "this is feature foo|this is feature bar"

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

Я бы посоветовал вам оставить его xml, так как он лучше всего подходит для вложенных данных.

person hek2mgl    schedule 09.02.2014
comment
спасибо, за ответ на мой вопрос. и я думаю, что я оставлю это xml как хорошее решение для меня сейчас. так как я не слишком много знаю о выравнивании/объединении этих двух .csv. Еще раз спасибо - person Dodi Nih; 09.02.2014