我有一个使用simplexml_load_file方法生成的数组,但遗憾的是我必须删除重复项。为此,我使用xpath,我将基于code_on_card属性删除foreach中的重复值。不幸的是,但在应用xpath后我得到一个空数组。错误在路径中,或者可能在其他代码中?
<offer file_format="IOF" version="2.6" extensions="yes">
<products>
<product id="8" producer_code_standard="GTIN13" code_on_card="KR001 B">
</product>
</products>
</offer>
没有正常工作的PHP代码
$XML = simplexml_load_file('file.xml');
$productlist = $XML->xpath("/offer/products/product/@code_on_card");
foreach ($productlist as $duplicate) {
unset($duplicate[0]);
}
print_r($productlist);
答案 0 :(得分:0)
您使用的代码根本不检查重复项,它实际上会找到所有节点并将其删除。
首先 - 为您已经遇到的代码创建一个数组。然后在处理每个产品时,检查它是否已经处理完毕。如果有,则将其从文档中删除。
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$XML = simplexml_load_file('NewFile.xml');
$productlist = $XML->xpath("/offer/products/product");
$prod = [];
foreach ($productlist as $product) {
$code = (string)$product['code_on_card'];
if ( in_array($code, $prod)) {
unset($product[0]);
}
else {
$prod[] = $code;
}
}
echo $XML->asXML();
我用它作为测试文件...
<?xml version="1.0" encoding="UTF-8"?>
<offer file_format="IOF" version="2.6" extensions="yes">
<products>
<product id="8" producer_code_standard="GTIN13" code_on_card="KR001 B">
</product>
<product id="8" producer_code_standard="GTIN13" code_on_card="KR001 A">
</product>
<product id="8" producer_code_standard="GTIN13" code_on_card="KR001 B">
</product>
</products>
</offer>
输出是......
<?xml version="1.0" encoding="UTF-8"?>
<offer file_format="IOF" version="2.6" extensions="yes">
<products>
<product id="8" producer_code_standard="GTIN13" code_on_card="KR001 B">
</product>
<product id="8" producer_code_standard="GTIN13" code_on_card="KR001 A">
</product>
</products>
</offer>