2016-09-20 2 views
9

データ:MWS GetMatchingProductでどのように関係を解析しますか?

<Relationships> 
     <ns2:VariationChild> 
     <Identifiers> 
      <MarketplaceASIN> 
      <MarketplaceId>ATVPDKIKX0DER</MarketplaceId> 
      <ASIN>B002KT3XQC</ASIN> 
      </MarketplaceASIN> 
     </Identifiers> 
     <ns2:Color>Black</ns2:Color> 
     <ns2:Size>Small</ns2:Size> 
     </ns2:VariationChild> 
     <ns2:VariationChild> 
     <Identifiers> 
      <MarketplaceASIN> 
      <MarketplaceId>ATVPDKIKX0DER</MarketplaceId> 
      <ASIN>B002KT3XQW</ASIN> 
      </MarketplaceASIN> 
     </Identifiers> 
     <ns2:Color>Black</ns2:Color> 
     <ns2:Size>Medium</ns2:Size> 
     </ns2:VariationChild> 
</Relationships> 

コード:

$data = simplexml_load_string($response); 
foreach($data->GetMatchingProductResult AS $GetMatchingProductResult){ 
    $Product = $GetMatchingProductResult->Product; 
    $Relationships = $Product->Relationships; 

    foreach($Relationships->children('ns2', true)->VariationChild AS $VariationChild){ 

      $Identifiers = $VariationChild->Identifiers; 
       $MarketplaceASIN = $Identifiers->MarketplaceASIN; 
        $MarketplaceId = $MarketplaceASIN->MarketplaceId; 
        $ASIN = $MarketplaceASIN->ASIN; 

        echo "$ASIN<br />"; 

    } 
} 

これは、それが実際にXMLをループされるように戻り、ないデータをエコー表示。しかし、私が試したことは何も実際に$ ASIN変数にデータを返します。これはネームスペース、またはsimpleXMLのためですか、それとも完全に何かが欠けていますか?

編集:他の方法は

foreach($Relationships->children('http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd', true)->VariationChild AS $VariationChild){ 

    $Identifiers   = $VariationChild->Identifiers; 
      $MarketplaceASIN = $Identifiers->MarketplaceASIN; 
       $MarketplaceId = $MarketplaceASIN->MarketplaceId; 
       $ASIN   = $MarketplaceASIN->ASIN; 

       echo "[$ASIN]<br />"; 

} 

$test = new SimpleXMLElement($response); 
$test->registerXPathNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd'); 
$variations = $test->xpath('//ns2:VariationChild'); 

foreach($variations AS $vars){ 

    print_r($vars); 

} 

を試していないどちらもループにデータを均等にするようです。

答えて

6

次のコードは、ASIN文字列をフェッチ:

$data = simplexml_load_string($response); 

foreach ($data->GetMatchingProductResult as $GetMatchingProductResult) { 
    $Product = $GetMatchingProductResult->Product; 
    $Relationships = $Product->Relationships; 

    foreach ($Relationships->children('ns2', true)->VariationChild 
    as $VariationChild) 
    { 
    foreach ($VariationChild->children('', true) as $var_child) { 
     echo $var_child->MarketplaceASIN->ASIN, PHP_EOL; 
    } 
    } 
} 

それは言及する価値がある、real response formatはあなたが投稿したものとは異なります。

2

はい、正しく使用されていない名前空間です。コード内の 'ns2'を完全な名前空間 "http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"に置き換えます。

registerXPathNamespaceを使用し、xpathを使用して子要素にアクセスする方がよい場合があります。

+0

ありがとうございます!残念ながら、どちらの方法も私のために働いていませんでした。私は上記の編集を投稿しましたが、データをループさえしていないようです。 – fwho

関連する問題