php - 您如何解析 MWS GetMatchingProduct 中的关系?

标签 php xml amazon-mws

数据:

<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 变量中返回数据。这是因为 namespace 或 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);

}

似乎都没有循环数据。

最佳答案

以下代码获取 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与您发布的内容不同。

关于php - 您如何解析 MWS GetMatchingProduct 中的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583983/

相关文章:

PHP:将一列显示为数组字段

php - 我的网站被污损了。如何在共享主机上保护自己?

Javascript 比另一个属性上的 XSLT generate-id() 更好地识别回调节点

php - 亚马逊 MWS : Accessing Array of Matching Products

php - Ubuntu 18.0.4 上的错误 "Your php installation appears to be missing the mysql extension which is required by wordpress"。和 PHP 7.2

php - 没有从 htaccess 中的 SetEnv 变量获取 $_SERVER 中的值

python - 实时网页抓取

java - XML 外部实体引用的不当限制 (CWE ID 611)(6 个缺陷)

javascript - 亚马逊 MWS 上传数据中 "<Header>"缺少标签 "<AmazonEnvelope>"

amazon-mws - 通过 Amazon Merchant Web Services 发送平面文件源