2017-09-25 173 views
0

我有一個使用simplexml_load_file方法生成的數組,但不幸的是有重複,我必須刪除。爲此,我使用xpath,並根據code_on_card屬性刪除foreach中的重複值。不幸的是,在應用xpath之後,我得到一個空數組。錯誤是在路徑中,或者可能是在進一步的代碼中?解析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

這將是更容易幫助,如果你附加的原始XML而不是加載對象的轉儲。 –

+0

我已經顯示了原始XML的片段,當然被截斷爲相關信息 – sauero

回答

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>