Php 将XML解析为CSV,同时使用逗号将一些字段值合并为一个字段

Php 将XML解析为CSV,同时使用逗号将一些字段值合并为一个字段,php,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]]>

我有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>

产品id,

如何解析此XML

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

乙二醇


注意-这只是sudo代码,不可复制和复制,它只是表明,无论使用何种语言,手动解析/处理都可以返回您想要的内容

您没有提出任何问题。到目前为止,你写的代码中有什么不适用?我无法让代码将所有图片链接合并到一个字段中。我的代码使它成为在csv中分隔列,而不是在一个图像列中,并且用逗号分隔的链接只是在图像字段周围加引号,否则csv解析器会认为它们都是单独的字段。或者使用逗号以外的其他符号来分隔图像。将以下内容更改为:img_1593.jpg,vetta_米色_side_1.jpg,beige2.jpg:img_1593.jpg,vetta_米色_side_1.jpg,beige2.jpg
img_1593.jpg,vetta_beige_side_1.jpg,beige2.jpg etc.
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.
    }

    /*------*/
}