2016-01-17 125 views
0

我正在使用amazon API,我需要檢查XML的狀態。例如:獲取xml狀態

<GetMatchingProductForIdResult status="Success" IdType="UPC" Id="082686068055"> 

<GetMatchingProductForIdResult status="ClientError" IdType="UPC" Id="082686068055"> 

我將如何去寫來檢查,如果狀態不是「成功」代碼?該XML看起來是這樣的:

<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> 
    <GetMatchingProductForIdResult status="Success" IdType="UPC" Id="082686068055"> 
    <Products> 
     <Product> 
     <Identifiers> 
      ... 
     </Identifiers> 
     <AttributeSets> 
     </AttributeSets> 
     </Product> 
    </Products> 
    </GetMatchingProductForIdResult> 

錯誤:

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

PHP代碼檢索內容:

if(isset($items->Products->Product->AttributeSets->children($namespace['ns2'])->ItemAttributes->ListPrice->Amount)) { 
    $amount = $items->Products->Product->AttributeSets->children($namespace['ns2'])->ItemAttributes->ListPrice->Amount; 
}else{ 
    $amount = '0.00'; 
} 

我能夠創建此代碼來獲取產品的ID :

//$xml is an open XML file. 
$items=$xml->GetMatchingProductForIdResult; 
if(isset($items['Id'])){ 
    $id = $items['Id']; 
}else{ 
    $id = 'No Id Found'; 
} 

第一標籤sta在整個XML文件中。標籤在文件結尾處關閉。我使用SimpleXML打開,並獲取文件中所需的所有其他數據,但當<AttributeSets>中的標記無效時,我總是遇到錯誤。我需要找到一種方法來避免這個問題。提前致謝。

+0

不,這不是因爲我期待來檢索'GetMatchingProductForIdResult'標籤,它是每個項目的主要標籤上的信息。 – McStuffins

+1

你有一個無效的''的例子和你用來檢索該元素的代碼嗎? Amazon API似乎不太可能返回錯誤的XML。 –

+0

是的。將更新錯誤。 – McStuffins

回答

1

事實上,有很多方法可以去。但是,只要你想只是檢測是否一個錯誤或成功occurr:

<?php 

$xmldata = <<<XML 
<?xml version='1.0' ?> 
<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> 
    <GetMatchingProductForIdResult status="Success" IdType="UPC" Id="082686068055"> 
     .... 
    </GetMatchingProductForIdResult> 
</GetMatchingProductForIdResponse> 
XML; 

$xml = new SimpleXmlElement($xmldata); 
$items = $xml->GetMatchingProductForIdResult; 
$ERROR_FOUND = 'Error' == $items->attributes()->status; 

if ($ERROR_FOUND) { 
    // do something on error, such as return or exit()... 
} 
// continue xml data parsing 
+0

等待。因爲迴應會有很多其他迴應,所以我只能實現最後4行? – McStuffins

+0

你的意思是,我想一個循環,對嗎?在哪裏migth有很多GetMatchingProductForIdResponse,是嗎? – felipsmartins

+0

是的,我已經實現了循環,但我可以把它放在循環的開頭嗎? – McStuffins