2012-10-05 4 views
0

Amazon MWS API를 호출하는 PHP 스크립트를 실행 중이며 isbn 번호로 책을 쿼리하려고합니다. 내가 좋아하는 뭔가를 받고되어야 할 때 나는XML이 올바른 결과 형식을 반환하지 않습니다.

SimpleXMLElement Object 
(
    [GetMatchingProductResult] => SimpleXMLElement Object 
     (
      [@attributes] => Array 
       (
        [ASIN] => 1908256052 
        [status] => Success 
       ) 

      [Product] => SimpleXMLElement Object 
       (
        [Identifiers] => SimpleXMLElement Object 
         (
          [MarketplaceASIN] => SimpleXMLElement Object 
           (
            [MarketplaceId] => A1F83G8C2ARO7P 
            [ASIN] => 1908256052 
           ) 

         ) 

        [AttributeSets] => SimpleXMLElement Object 
         (
         ) 

        [Relationships] => SimpleXMLElement Object 
         (
         ) 

        [SalesRankings] => SimpleXMLElement Object 
         (
          [SalesRank] => Array 
           (
            [0] => SimpleXMLElement Object 
             (
              [ProductCategoryId] => book_display_on_website 
              [Rank] => 3304 
             ) 

            [1] => SimpleXMLElement Object 
             (
              [ProductCategoryId] => 271146 
              [Rank] => 11 
             ) 

            [2] => SimpleXMLElement Object 
             (
              [ProductCategoryId] => 1039764 
              [Rank] => 25 
             ) 

            [3] => SimpleXMLElement Object 
             (
              [ProductCategoryId] => 270704 
              [Rank] => 38 
             ) 

           ) 

         ) 

       ) 

     ) 

    [ResponseMetadata] => SimpleXMLElement Object 
     (
      [RequestId] => bba76d27-9648-4988-b0b6-63b43116d16d 
     ) 

) 

을 돌려 다음 얻을

...

<?xml version="1.0"?> 
<GetMatchingProductResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> 
<GetMatchingProductResult ASIN="1908256052" status="Success"> 
    <Product xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"> 
    <Identifiers> 
     <MarketplaceASIN> 
     <MarketplaceId>A1F83G8C2ARO7P</MarketplaceId> 
     <ASIN>1908256052</ASIN> 
     </MarketplaceASIN> 
    </Identifiers> 
    <AttributeSets> 
     <ns2:ItemAttributes xml:lang="en-GB"> 
     <ns2:Author>Slimming World</ns2:Author> 
     <ns2:Binding>Hardcover</ns2:Binding> 
     <ns2:Format>Illustrated</ns2:Format> 
     <ns2:IsEligibleForTradeIn>true</ns2:IsEligibleForTradeIn> 
     <ns2:Label>Slimming World</ns2:Label> 
     <ns2:Languages> 
      <ns2:Language> 
      <ns2:Name>english</ns2:Name> 
      <ns2:Type>Unknown</ns2:Type> 
      </ns2:Language> 
      <ns2:Language> 
      <ns2:Name>english</ns2:Name> 
      <ns2:Type>Original Language</ns2:Type> 
      </ns2:Language> 
      <ns2:Language> 
      <ns2:Name>english</ns2:Name> 
      <ns2:Type>Published</ns2:Type> 
      </ns2:Language> 
     </ns2:Languages> 
     <ns2:ListPrice> 
      <ns2:Amount>16.99</ns2:Amount> 
      <ns2:CurrencyCode>GBP</ns2:CurrencyCode> 
     </ns2:ListPrice> 
     <ns2:Manufacturer>Slimming World</ns2:Manufacturer> 
     <ns2:NumberOfItems>1</ns2:NumberOfItems> 
     <ns2:NumberOfPages>224</ns2:NumberOfPages> 
     <ns2:PackageDimensions> 
      <ns2:Height Units="inches">0.87</ns2:Height> 
      <ns2:Length Units="inches">9.69</ns2:Length> 
      <ns2:Width Units="inches">7.64</ns2:Width> 
      <ns2:Weight Units="pounds">1.85</ns2:Weight> 
     </ns2:PackageDimensions> 
     <ns2:ProductGroup>Book</ns2:ProductGroup> 
     <ns2:ProductTypeName>ABIS_BOOK</ns2:ProductTypeName> 
     <ns2:PublicationDate>2011-11-20</ns2:PublicationDate> 
     <ns2:Publisher>Slimming World</ns2:Publisher> 
     <ns2:SmallImage> 
      <ns2:URL>http://ecx.images-amazon.com/images/I/61aM-pJlQtL._SL75_.jpg</ns2:URL> 
      <ns2:Height Units="pixels">75</ns2:Height> 
      <ns2:Width Units="pixels">64</ns2:Width> 
     </ns2:SmallImage> 
     <ns2:Studio>Slimming World</ns2:Studio> 
     <ns2:Title>Slimming World Extra Easy All in One</ns2:Title> 
     </ns2:ItemAttributes> 
    </AttributeSets> 
    <Relationships/> 
    <SalesRankings> 
     <SalesRank> 
     <ProductCategoryId>book_display_on_website</ProductCategoryId> 
     <Rank>2767</Rank> 
     </SalesRank> 
     <SalesRank> 
     <ProductCategoryId>271146</ProductCategoryId> 
     <Rank>7</Rank> 
     </SalesRank> 
     <SalesRank> 
     <ProductCategoryId>1039764</ProductCategoryId> 
     <Rank>24</Rank> 
     </SalesRank> 
     <SalesRank> 
     <ProductCategoryId>270704</ProductCategoryId> 
     <Rank>38</Rank> 
     </SalesRank> 
    </SalesRankings> 
    </Product> 
</GetMatchingProductResult> 
<ResponseMetadata> 
    <RequestId>e8dd69e8-7a40-4cab-9793-a666c0648753</RequestId> 
</ResponseMetadata> 
</GetMatchingProductResponse> 

사용하는 기능의 메신저

public function getXML($url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $response = curl_exec($ch); 

    return simplexml_load_string($response); 
} 

이다가 나는 것이 있습니다 있어야 할 곳에 없는? 다른 결과가 반환되는 이유는 무엇입니까?

답변

2

함수 simplexml_load_string은 해석 된 XML 만 SimpleXMLElement 객체로 반환합니다. ... 어떻게 분석하고 요소를 반복하는

SimpleXMLElement 오브젝트는 iterableaccessible 같습니다

public function getXML($url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $response = curl_exec($ch); 

    // return $xml if you still want to parse the data elsewhere 
    $xml = simplexml_load_string($response); 

    // return this if you just want the raw XML string 
    return $xml->asXML(); 
} 

업데이트 : 대신 SimpleXMLElement::asXML을보십시오.

foreach ($xml->GetMatchingProductResult->Product as $product) { 
    // do something for each <Product>, such as output the ASIN... 
    echo $product->Identifiers->MarketplaceASIN->ASIN; 
} 

당신은 더 많은 예제에 대한 Basic SimpleXML usage에 PHP 문서를 참조 할 수 있습니다 : 이것은 당신이 요소를 반복하는 foreach를 사용할 수 있다는 것을 의미합니다. 어떤 시점에서 네임 스페이스를 처리해야합니다. 여기에 몇 가지 추가 리소스는 다음과 같습니다 제가 예를 들어, 결과 데이터를 추출을 통해 볼 수있을 것입니다 방법, 이것에 대해

+0

임 확실하지 'foreach (GetMatchingProductResult as ...)' –

+0

SimpleXMLElement 객체를 구문 분석하는 방법을 설명하기 위해 내 대답을 업데이트했습니다. 희망이 도움이됩니다! – Andrew

관련 문제