当前位置: 首页 > 知识库问答 >
问题:

如何在PHP中将XML文件中的值添加到csv文件中?

祁通
2023-03-14

我有一个链接到一个包含不同值的在线XML文件。我已经编写了一段代码,允许我检索这个文件中两个特定标记的内容,并将它们放入一个csv文件中。

第一个标记是:

<g:id>...</g:id>

第二个是带有以下内容的url:

<g:link>...</g:link>

我的问题是,在输出csv文件中,我确实得到了URL,但它们是放在列中的,而id没有放在我的csv文件中:

我怎样才能让输出文件像这样呢?

<?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);

?>

共有1个答案

巫马磊
2023-03-14

您可以使用SimpleXML解析XML并查找数据,而不是尝试在XML字符串中搜索。

请注意,fputcvs()将数组作为第二个参数。

$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);

将生成如下所示的CSV文件:

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
 类似资料:
  • 问题内容: 我想将先前从其他文件(已经完成)中提取的一系列文件添加到jar中。这些文件将覆盖JAR中的文件。最有效的方法是什么?我需要它快。谢谢! 问题答案: 请记住,JAR文件是ZIP文件。 只需使用一些ZIP库。

  • 问题内容: 我有几个CSV文件,如下所示: 我想在所有CSV文件中添加一个新列,使其看起来像这样: 到目前为止,我的脚本是: (Python 3.2) 但是在输出中,脚本跳过了每一行,新列中仅包含Berry: 问题答案: 这应该使您知道该怎么做: 编辑,注意在py3k中必须使用 感谢您接受答案。在这里,您有一个好处(您的工作脚本): 请注意 中的参数。默认情况下,它设置为,这就是为什么间距为两倍的

  • 如果我加上 然后我得到下面的错误。 在我的蓝图中使用camel-http4的正确方式是什么?在卡拉夫的camel路由中使用camel-http4的正确方式是什么?我应该如何修改功能。xml? 组织。奥斯基。服务分解器。ResolutionException:无法解析根:缺少需求[root]osgi。身份奥斯基。身份=社会身份。卡尔;类型=卡拉夫。特色version=“[1.0.0.快照,1.0.0

  • 问题内容: 有人可以向我解释如何将WAR文件添加到EAR吗?我有一个已经包含一个WAR文件的EAR文件,我有另一个我想添加到该EAR的WAR文件,因此它可以同时包含两个WAR并正常工作。 我不知道该怎么做,但我认为可以手动更改EAR中包含的application.xml文件。 谢谢! 问题答案: 假设EAR文件中尚未包含WAR文件,则可以使用常见的zip实用程序在EAR文件中添加WAR文件。 请注

  • 问题内容: 我正在将对象编组到XML文件中。如何将注释添加到该XML文件中? 问题答案: 我看不到单独使用JAXB的方法。但是,我认为您可以利用DOM达到预期的效果: 其中jaxbContext是您正在使用的JAXBContext对象,而jaxbObject是要编组的对象。该示例仅将注释附加到文档末尾。对于其他位置,您将不得不遍历doc对象的DOM或使用XPath来查找要添加注释的确切元素,并在其

  • 问题内容: 我想知道是否可以使用函数将数据框添加到现有的csv文件中。csv文件与加载的数据具有相同的结构。 问题答案: 你可以在函数中指定python写入模式。对于追加,它是。 在你的情况下: 默认模式为。