1

我在一个问题上需要一些帮助:我正在使用 PHP 脚本将 XML 转换为 CSV,但是我对此有疑问,它们是属性中的属性。

这是 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 文件中获取所有这些特性。任何帮助将不胜感激。

提前致谢!

4

1 回答 1

0

CSV 不太适合这种嵌套数据。

要么你必须创建两个 csv 文件:prodcuts.csvfeatures.csvwhere 条目features.csv指向条目 in 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,因为它最适合嵌套数据。

于 2014-02-09T16:22:52.400 回答