2016-11-11 84 views
1

我正在嘗試獲取其中每個MerchantFulfillmentIDSKU,其中值爲MFNForeach XML如果Loop僅返回第一個節點

這裏是我的xml:

$xml = '<?xml version="1.0" encoding="UTF-8"?> 
<Message> 
<SettlementReport> 
    <Refund> 
     <Fulfillment> 
      <MerchantFulfillmentID>MFN</MerchantFulfillmentID> 
      <AdjustedItem> 
       <SKU>1MFNSKU1</SKU> 
      </AdjustedItem> 
     </Fulfillment> 
    </Refund> 
    <Refund> 
     <Fulfillment> 
      <MerchantFulfillmentID>AFN</MerchantFulfillmentID> 
      <AdjustedItem> 
       <SKU>1AFNSKU1</SKU> 
      </AdjustedItem> 
     </Fulfillment> 
    </Refund> 
      <Refund> 
     <Fulfillment> 
      <MerchantFulfillmentID>MFN</MerchantFulfillmentID> 
      <AdjustedItem> 
       <SKU>2MFNSKU2</SKU> 
      </AdjustedItem> 
     </Fulfillment> 
    </Refund> 
      <Refund> 
     <Fulfillment> 
      <MerchantFulfillmentID>AFN</MerchantFulfillmentID> 
      <AdjustedItem> 
       <SKU>2AFNSKU2</SKU> 
      </AdjustedItem> 
     </Fulfillment> 
    </Refund> 
</SettlementReport> 
</Message>'; 

我的PHP

$xmlload = simplexml_load_string($xml); 
foreach ($xmlload->Message->SettlementReport->Refund->Fulfillment as $ful) { 
if ($ful->MerchantFulfillmentID == 'MFN') { 
    echo $ful->MerchantFulfillmentID; 
    echo '<br />'; 
    echo $ful->AdjustedItem->SKU; 
} 
} 

我的結果是

最惠國

1MFNSKU1

它只從第一次迭代中找到結果。我該如何做到這一點,以便MFN的每個實例都會回顯出SKU

回答

1

我個人會從你的XML中創建一個數組,如下所示。

$xmlToString = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
$xmlToArray = json_decode(json_encode((array)$xmlToString), TRUE); 

print_r($xmlToArray); 

這將打印出來;

 
Array 
(
    [SettlementReport] => Array 
     (
      [Refund] => Array 
       (
        [0] => Array 
         (
          [Fulfillment] => Array 
           (
            [MerchantFulfillmentID] => MFN 
            [AdjustedItem] => Array 
             (
              [SKU] => 1MFNSKU1 
             ) 

           ) 

         ) 

        [1] => Array 
         (
          [Fulfillment] => Array 
           (
            [MerchantFulfillmentID] => AFN 
            [AdjustedItem] => Array 
             (
              [SKU] => 1AFNSKU1 
             ) 

           ) 

         ) 

        [2] => Array 
         (
          [Fulfillment] => Array 
           (
            [MerchantFulfillmentID] => MFN 
            [AdjustedItem] => Array 
             (
              [SKU] => 2MFNSKU2 
             ) 

           ) 

         ) 

        [3] => Array 
         (
          [Fulfillment] => Array 
           (
            [MerchantFulfillmentID] => AFN 
            [AdjustedItem] => Array 
             (
              [SKU] => 2AFNSKU2 
             ) 

           ) 

         ) 

       ) 

     ) 

) 

然後執行「$ xmlToArray」的foreach。

 

    foreach($xmlToArray['SettlementReport']['Refund'] as $ful) 
    { 
     if($ful['Fulfillment']['MerchantFulfillmentID'] == 'MFN') 
     { 
      echo $ful['Fulfillment']['MerchantFulfillmentID']; 
      echo $ful['Fulfillment']['AdjustedItem']['SKU']; 

     } 
    } 

相關artile:Converting a SimpleXML Object to an Array

+0

酷。謝謝。 – bbruman

+0

我也在答案中加入了foreach示例;) –

+0

也要測試上面的代碼,請訪問http://ideone.com/U1ey2P –