我有一个包含产品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附加)中不存在的文件。
答案 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');
作为数组?