Foreach XML如果Loop仅返回第一个节点

问题描述:

我正在尝试获取其中每个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

我个人会从你的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 –