I have a link to an online XML file that contains different values. I have written a code that allows me to retrieve the contents of two specific tags in this file and put them in a csv file.
The first tag is the :
JavaScript
x
<g:id></g:id>
And the second one is a url with :
JavaScript
<g:link></g:link>
My problem is that in the output csv file I do get the urls but they are put in columns and the id does not get put in my csv file :
How can I do please to have the output file like this?
JavaScript
<?php
//Function for split string
function multiSplit($string)
{
$output = array();
$cols = explode("<g:image_link>", $string);
foreach ($cols as $col)
{
$dashcols = explode("</g:image_link>", $col);
$output[] = $dashcols[0];
}
return $output;
}
//Function for split string
function multiSplit2($string)
{
$output = array();
$cols = explode("<g:id>", $string);
foreach ($cols as $col)
{
$dashcols = explode("</g:id>", $col);
$output[] = $dashcols[0];
}
return $output;
}
$html = file_get_contents('https://www.ripcurl.eu/assets/fb_product_feed_eur.xml');
$url = multiSplit($html);
$id = multiSplit2($html);
$idfinal = $id[1].'-RC';
print_r($idfinal); //BDGTP6-RC
echo '<br>';
print_r($url[1]); //https://dwk1ydkfsczz3.cloudfront.net/images/2020/06/15/BDGTP6-0070-1jpg-051717be-657e-4f08-9d75-914926540fd4.jpg
$name = "BI4_".date('Ymd_His').".csv";
$cheminfile = "C:/wamp64/www/retail_BI/".$name;
$fp = fopen("$cheminfile", "w");
$delimiter = ';';
fputcsv($fp, array('stylecode', 'images'), $delimiter);
foreach ( $url as $ur ) {
fputcsv($fp, $url, $delimiter);
}
fclose($fp);
?>
Advertisement
Answer
you could use SimpleXML to parse the XML and find data, instead of trying to search in XML string.
Note that fputcvs()
takes an array as second argument.
JavaScript
$delimiter = ';';
$fp = fopen($cheminfile, "w");
$xml = simplexml_load_file('https://www.ripcurl.eu/assets/fb_product_feed_eur.xml');
fputcsv($fp, array('stylecode', 'images'), $delimiter);
// loop over items in "channel"
foreach ($xml->channel->item as $item)
{
// get values for `g:` namespace
$children = $item->children("http://base.google.com/ns/1.0");
// get id and link
$id = (string) $children->id;
$link = (string) $children->image_link;
// add values to CSV
fputcsv($fp, [$id, $link], $delimiter);
}
fclose($fp);
Will generate a CSV file like this :
JavaScript
stylecode;images
BDGTP6;https://dwk1ydkfsczz3.cloudfront.net/images/2020/06/15/BDGTP6-0070-1jpg-051717be-657e-4f08-9d75-914926540fd4.jpg
CFEBL9;https://dwk1ydkfsczz3.cloudfront.net/images/2020/08/03/CFEBL9-0090-1jpg-a9bd9dda-a775-4b4f-af00-3dcbf261bc2d.jpg