Php Foreach XML If循环仅返回第一个节点
我正在尝试获取每个Php Foreach XML If循环仅返回第一个节点,php,xml,Php,Xml,我正在尝试获取每个商品履行ID中包含最惠国待遇值的SKU 以下是我的xml: $xml = '<?xml version="1.0" encoding="UTF-8"?> <Message> <SettlementReport> <Refund> <Fulfillment> <MerchantFulfillmentID>MFN</M
商品履行ID
中包含最惠国待遇
值的SKU
以下是我的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>';
$xml='1!'
最惠国待遇
1MFNSKU1
AFN
1AFNSKU1
最惠国待遇
2MFNSKU2
AFN
2AFNSKU2
';
还有我的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;
}
}
$xmlload=simplexml\u load\u字符串($xml);
foreach($xmlload->Message->SettlementReport->退款->以$ful形式履行){
如果($ful->MerchantFulfillmentID=='MFN'){
echo$ful->MerchantFullmentId;
回声“
”;
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);
$xmlToString=simplexml\u load\u字符串($xml,'simplexmlement',LIBXML\u NOCDATA);
$xmlToArray=json_解码(json_编码((数组)$xmlToString),TRUE);
打印费($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
)
)
)
)
)
)
排列
(
[SettlementReport]=>阵列
(
[退款]=>阵列
(
[0]=>阵列
(
[Fulfillment]=>数组
(
[MerchantFulfillmentID]=>最惠国待遇
[AdjustedItem]=>阵列
(
[SKU]=>1MFNSKU1
)
)
)
[1] =>阵列
(
[Fulfillment]=>数组
(
[MerchantFulfillmentID]=>AFN
[AdjustedItem]=>阵列
(
[SKU]=>1AFNSKU1
)
)
)
[2] =>阵列
(
[Fulfillment]=>数组
(
[MerchantFulfillmentID]=>最惠国待遇
[AdjustedItem]=>阵列
(
[SKU]=>2MFNSKU2
)
)
)
[3] =>阵列
(
[Fulfillment]=>数组
(
[MerchantFulfillmentID]=>AFN
[AdjustedItem]=>阵列
(
[SKU]=>2AFNSKU2
)
)
)
)
)
)
然后在“$xmlToArray”上执行foreach
foreach($xmlToArray['SettlementReport']['return']作为$ful)
{
如果($ful['Fulfillment']['MerchantFulfillmentID']=='MFN')
{
echo$ful['Fulfillment']['MerchantFulfillmentID'];
echo$ful['Fulfillment']['AdjustedItem']['SKU'];
}
}
相关文章:我还在答案中添加了foreach示例;)我感谢你的帮助!数组确实使其更易于使用。我正在本地主机上工作,必须添加
['Message']
使其成为每个($xmlToArray['Message']['SettlementReport']['return']作为$ful)的的未定义索引:SettlementReport
——但它工作得很好!再次感谢你。
foreach($xmlToArray['SettlementReport']['Refund'] as $ful)
{
if( $ful['Fulfillment']['MerchantFulfillmentID'] == 'MFN')
{
echo $ful['Fulfillment']['MerchantFulfillmentID'];
echo $ful['Fulfillment']['AdjustedItem']['SKU'];
}
}