Foreach XML如果Loop仅返回第一个节点
问题描述:
我正在尝试获取其中每个MerchantFulfillmentID
的SKU
,其中值为MFN
。Foreach 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']; } }
酷。谢谢。 – bbruman
我也在答案中加入了foreach示例;) –
也要测试上面的代码,请访问http://ideone.com/U1ey2P –