将XML解析为CSV,同时将一些字段值组合成一个逗号

时间:2019-01-09 19:21:57

标签: php

我有products.xml文件,我想将其制作为csv,但是将image1,image2等组合到一个csv列字段中,链接用逗号分隔。

<?xml version="1.0" encoding="utf-8"?>
<products>
  <product>
    <product_id>14</product_id>
    <name><![CDATA[Tricycle Vetta Melange Beige]]></name>
    <date_created><![CDATA[2018-09-11 13:07:14]]></date_created>
    <sku><![CDATA[31006020047]]></sku>
    <product_url><![CDATA[https://localhost/trikolka-vetta-melange-beige]]></product_url>
    <stock_status>In Stock</stock_status>
    <parent_cat><![CDATA[All (Test)]]></parent_cat>
    <sub_cat><![CDATA[Tricycles]]></sub_cat>
    <description><![CDATA[Tricycle 3 in 1
(max. weigh load – 30 kg).
]]></description>
    <description_html><![CDATA[Tricycle 3 in 1
(max. weigh load – 30 kg).
]]></description_html>
    <characteristics>
      <weight>15.6000</weight>
      <volume>0.130</volume>
      <barcode>3801006020477</barcode>
    </characteristics>
    <images>
      <image_1>img_1593.jpg</image_1>
      <image_2>vetta_beige_side_1.jpg</image_2>
      <image_3>beige2.jpg</image_3>
      <image_4>beige_up.jpg</image_4>
      <image_5>beige_bike_1.jpg</image_5>
    </images>
  </product>

CSV应该带有标题,并且所有图像链接都应放在csv的一个字段中,并用逗号分隔

img_1593.jpg,vetta_beige_side_1.jpg,beige2.jpg etc.

product_id,

1 个答案:

答案 0 :(得分:0)

您如何解析此XML?

如果您是用php自己做的(为您标记了这个问题),那么我将创建一个名为“产品”的类,该类使用每个产品节点进行构造,将每个子节点添加为单个属性或数组,然后添加一个“ asCSVRow()函数,该函数返回字符串。然后,无论XML如何构造属性,您都可以对属性进行任何操作。

例如

class product { 

    /*------*/
    function __construct($productNode) {
        $this->name = $productNode->name;
        //Add other properties here
        $this->images = array();
        foreach ($productNode->images as $imageNode) {
          $this->images[] = $imageNode;
        }
        //Syntax of this will differ depending on your method of parsing
    }

    /*------*/
    public asCSVRow(){
        return sprintf(
            '"%s","%s"' . PHP_EOL,
            $this->name,
            implode(',', $this->images)
        );
        //Add other properties, and protect against double quotes in strings.
    }

    /*------*/
}

注意-这只是sudo代码,不能复制和粘贴,它表明无论使用哪种语言,手动解析/处理都可以返回所需的内容