使用PHP删除XML文档中未包含的文件

时间:2019-02-19 10:44:49

标签: php xml

我有一个包含产品SKU的XML文件。我也有一个与此XML文件相对应的文件夹。

Snippet from XML:
<Feed>
  <Product>
    <ItemCode>ALT-AAB-BL</ItemCode>
    <BaseItemCode>ALT-AAB</BaseItemCode>
    <StockCheckCode>ALT-AAB-BL</StockCheckCode>
 </Product>
  <Product>
    <ItemCode>ALT-AAB-L</ItemCode>
    <BaseItemCode>ALT-AAB</BaseItemCode>
    <StockCheckCode>ALT-AAB-L</StockCheckCode>
  </Product>
  <Product>
    <ItemCode>ALT-AAB-N</ItemCode>
    <BaseItemCode>ALT-AAB</BaseItemCode>
    <StockCheckCode>ALT-AAB-N</StockCheckCode>
 </Product>
</Feed>

我一直在尝试使用php,但是我是一名初中生,不知道从哪里开始,所以我会给你一些伪代码。

if $domelement->ItemCode != filename.jpg{
    delte.jpg;
}

是的,此伪代码很糟糕。我基本上能够拉入.xml文件并能够处理数据。

我基本上想删除xml文件中不存在的文件,并保留其余的文件。我知道如何在需要的情况下使用.png标记ItemCode。

<?php

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load('altitude.xml');
$xpath = new DOMXPath($dom);

$query = sprintf('/Feed/Product/BaseItemCode');

foreach($xpath->query($query) as $record) {
//delete file that is not present in BaseItemCode
}

我只希望从文件夹中删除xml-> BaseItemCode(我将附加.png或.jpg附加)中不存在的文件。

2 个答案:

答案 0 :(得分:0)

您需要两个列表:XML的白名单和系统的所有项目列表。

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load('altitude.xml');
$xpath = new DOMXPath($dom);

$query = sprintf('/Feed/Product/BaseItemCode');
$xmlList = [];

foreach($xpath->query($query) as $record) {
    $xmlList[] = $record->ItemCode . '.jpg';
    $xmlList[] = $record->ItemCode . '.png'; // If you can, use smarter way
}

$directory = '/full/path/to/dir';
$dirList = array_diff(scandir($directory), array('..', '.'));

$filesToDelete = array_diff($dirList, $xmlList);

foreach ($filesToDelete as $file) {
    unlink($directory . DIRECTORY_SEPARATOR . $file);
}

答案 1 :(得分:0)

@justinas的方法有效。从CSV文件导入的每个单个数组元素的末尾都有这个奇怪的空间。我将XML转换为CSV文件,并将其用作数组。

<?php

$csv = file('convertcsv.csv');

function test_alter(&$item1, $key, $prefix)
{
    $item1 = "$item1$prefix";

}

array_walk($csv, 'test_alter', '.png');
//var_dump($csv);

$directory = 'img';
$dirList = array_diff(scandir($directory), array('..', '.'));


$filesToDelete = array_diff($dirList, $csv);

foreach ($filesToDelete as $file) {
    unlink($directory . DIRECTORY_SEPARATOR . $file);
}
echo "klaar"


?>

任何人都可以告诉我,如果使用数组,为什么数组中的每个元素后面都有一个空格?

$csv = file('convertcsv.csv');

作为数组?