解析xpath空数组

时间:2017-09-25 07:38:34

标签: php xpath

我有一个使用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);

1 个答案:

答案 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>