簡體   English   中英

使用PHP將XML轉換為CSV

[英]Converting XML to CSV using PHP

我需要將XML文件轉換為CSV。

我有一個腳本,但是不確定如何根據需要使用它。

這是腳本

$filexml='141.xml';
if (file_exists($filexml)) {
$xml = simplexml_load_file($filexml);
$f = fopen('141.csv', 'w');
foreach ($xml->item as $item) {
fputcsv($f, get_object_vars($item),',','"');
}
fclose($f);
}

該文件稱為141.xml,這是XML中需要轉換的一些代碼。

<?xml version="1.0" encoding="UTF-8" ?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">



<channel>
<item>
<title><![CDATA[//title name]]></title>
<link><![CDATA[https://www.someurl.co.uk]]></link>
<description><![CDATA[<p><span>Demo Description</span></p>]]></description>
<g:id><![CDATA[4796]]></g:id>
<g:condition><![CDATA[new]]></g:condition>
<g:price><![CDATA[0.89 GBP]]></g:price>
<g:availability><![CDATA[in stock]]></g:availability>
<g:image_link><![CDATA[https://image-location.png]]></g:image_link>
<g:service><![CDATA[Free Shipping]]></g:service>
<g:price><![CDATA[0 GBP]]></g:price>
</item>

我正在使用以下命令從SSH運行腳本:

php /var/www/vhosts/mywebsite.co.uk/httpdocs/xml/convert.php

如果可以幫助我,將不勝感激:)

謝謝

試試下面的代碼。 而且XML文件語法錯誤,缺少rss和channel的結束標記。

$filexml='141.xml';
if (file_exists($filexml)) 
 {
       $xml = simplexml_load_file($filexml);
       $f = fopen('141.csv', 'w');
       createCsv($xml, $f);
       fclose($f);
 }
 function createCsv($xml,$f)
 {
       foreach ($xml->children() as $item) 
        {
           $hasChild = (count($item->children()) > 0)?true:false;
           if( ! $hasChild)
           {
              $put_arr = array($item->getName(),$item); 
              fputcsv($f, $put_arr ,',','"');
           }
           else
           {
              createCsv($item, $f);
           }
        }
 }

考慮將XML數據傳遞到數組$values並將數組逐行導出到csv。

具體來說,使用xpath()函數進行XML提取,遍歷每個<item>並提取其所有子級值( /* )。 順便說一下,我在CSV文件中添加了標題。

$filexml='141.xml';
if (file_exists($filexml))  {

   $xml = simplexml_load_file($filexml);
   $i = 1;           // Position counter
   $values = [];     // PHP array

   // Writing column headers
   $columns = array('title', 'link', 'description', 'id', 'condition',
                    'price', 'availability', 'image_link', 'service', 'price');

   $fs = fopen('141.csv', 'w');
   fputcsv($fs, $columns);      
   fclose($fs);

   // Iterate through each <item> node
   $node = $xml->xpath('//item');

   foreach ($node as $n) {           

       // Iterate through each child of <item> node
       $child = $xml->xpath('//item['.$i.']/*');      

       foreach ($child as $value) {
          $values[] = $value;         
       }

       // Write to CSV files (appending to column headers)
       $fs = fopen('141.csv', 'a');
       fputcsv($fs, $values);      
       fclose($fs);  

       $values = [];    // Clean out array for next <item> (i.e., row)
       $i++;            // Move to next <item> (i.e., node position)
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM