如果出错,那么用不同的参数开始循环?

时间:2015-12-29 08:39:17

标签: php arrays xml

我正在使用Amazon API,当我提交请求时,响应类似<GetMatchingProductForIdResult Id="082686322363" IdType="UPC" status="ClientError">我将如何继续循环,因为每个xml表有5个产品需要解析。这样的事情会起作用吗?

if ($items->GetMatchingProductForIdResult->Products->Product->AttributeSets->Relationship === FALSE) {
    $salesRank = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->SalesRankings->SalesRank[0];
} else {
    $ASIN = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->Relationship->VariationParent->Identifiers->MarketplaceASIN->ASIN;
}

也许只是检查ID的东西,如果它=&#39;成功&#39;继续,如果没有,那么跳过它?我将如何跳过UPC数据? 完全错误:

<GetMatchingProductForIdResult Id = "082686322362" IdType = "UPC" status = "ClientError">
<Error>
    <Type>Sender</Type>
    <Code>InvalidParameterValue</Code>
    <Message>Invalid UPC identifier 082686322362 for marketplace ATVPDKIKX0DER</Message>
</Error>
</GetMatchingProductForIdResult>

我正在努力工作的循环:

for($i = 0; $i < (count($groupedArrays) - 0); $i++){
$xmlFilePath = 'xml/' . $file_name . $i . '.xml';
$xml = simplexml_load_file($xmlFilePath);

foreach($xml->children() as $items) { 
    if ($items->GetMatchingProductForIdResult->Error) {
        continue;
    }
    $upcTag = $items['Id'] . ',';
    if($items->GetMatchingProductForIdResult->Products->Product->AttributeSets->Relationship === FALSE){
        $salesRank = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->SalesRankings->SalesRank[0] . ',';
    } else {
        $ASIN =  $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->Relationship->VariationParent->Identifiers->MarketplaceASIN->ASIN . ',';
    }
        $price = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->children('ns2', true)->ItemAttributes->Binding->Amount . ',';
    }
}  

提前致谢!

1 个答案:

答案 0 :(得分:2)

我会检查错误标记,以便处理您的错误:

for($i = 0; $i < (count($groupedArrays) - 0); $i++){
    $xmlFilePath = 'xml/' . $file_name . $i . '.xml';
    $xml = simplexml_load_file($xmlFilePath);

    foreach($xml->children() as $items) { 
        if ($items->GetMatchingProductForIdResult->Error) {
            continue;
        }
        $upcTag $items['Id'] . ',';
        if($items->GetMatchingProductForIdResult->Products->Product->AttributeSets->Relationship === FALSE){
            $salesRank = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->SalesRankings->SalesRank[0];
        } else {
            $ASIN =  $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->Relationship->VariationParent->Identifiers->MarketplaceASIN->ASIN;
        }
        $salesRank = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->
            $price = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->children('ns2', true)->ItemAttributes->Binding->Amount . ',';
    }
}  

语法错误 - 如果PHP没有显示任何错误,您至少应该修复它,因为它令人困惑并且不清楚您要对代码执行的操作:

$upcTag $items['Id'] . ',';

这看起来不对:

$salesRank = $items->GetMatchingProductForIdResult->Products->Product->AttributeSets->

您不希望使用 - &gt;

结束您的代码行