1

XMLドキュメントを解析しようとしています。var_dump を見るとすべての情報を取得できますが、ドキュメントから ID と画像の URL を取り出す必要があります。for each ループを使用してみましたが、正しい回数ループを通過しますが、必要な Id 番号は変更されません。XML ドキュメントは次のとおりです。

<?xml version="1.0"?>
<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<GetMatchingProductForIdResult Id="9781124028491" IdType="ISBN" status="ClientError">
 <Error>
<Type>Sender</Type>
<Code>InvalidParameterValue</Code>
<Message>Invalid ISBN identifier 9781124028491 for marketplace ATVPDKIKX0DER</Message>
</Error>
</GetMatchingProductForIdResult>
<GetMatchingProductForIdResult Id="9780030114687" IdType="ISBN" status="Success">
<Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
<Product>
  <Identifiers>
    <MarketplaceASIN>
      <MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
      <ASIN>0030114683</ASIN>
    </MarketplaceASIN>
  </Identifiers>
  <AttributeSets>
    <ns2:ItemAttributes xml:lang="en-US">
      <ns2:Author>Turk, Jonathan.</ns2:Author>
      <ns2:Binding>Unknown Binding</ns2:Binding>
      <ns2:Label>Saunders College Publishers, USA</ns2:Label>
      <ns2:Manufacturer>Saunders College Publishers, USA</ns2:Manufacturer>
      <ns2:ProductGroup>Book</ns2:ProductGroup>
      <ns2:ProductTypeName>BOOKS_1973_AND_LATER</ns2:ProductTypeName>
      <ns2:PublicationDate>2004-12-07</ns2:PublicationDate>
      <ns2:Publisher>Saunders College Publishers, USA</ns2:Publisher>
      <ns2:SmallImage>
        <ns2:URL>http://g-ecx.images-amazon.com/images/G/01/x-site/icons/no-img-sm._V192198896_.gif</ns2:URL>
        <ns2:Height Units="pixels">40</ns2:Height>
        <ns2:Width Units="pixels">60</ns2:Width>
      </ns2:SmallImage>
      <ns2:Studio>Saunders College Publishers, USA</ns2:Studio>
      <ns2:Title>Introduction to Environmental Studies.</ns2:Title>
    </ns2:ItemAttributes>
  </AttributeSets>
  <Relationships/>
  <SalesRankings/>
</Product>

簡潔にするために切り詰めました。私のphpはこれです:

 foreach($parsed_xml->GetMatchingProductForIdResult as $item ) {
 //$ean =$parsed_xml->GetMatchingProductForIdResult->attributes()->Id; var_dump($ean);//->attributes()->Id
 $current = $parsed_xml->GetMatchingProductForIdResult->Products;

        print_r(" passed the foreach statement ");

 //$status = $parsed_xml->GetMatchingProductForIdResult->attributes()->status;

     //$isbn13 = $ean;print_r($isbn13);
      if(isset($parsed_xml->GetMatchingProductForIdResult, $current, $current->Product, $current->Product->AttributeSets)){
        $amazonResult = array(
                            'isbn' => $parsed_xml->GetMatchingProductForIdResult->attributes()->Id,//$isbn13,
            'ImageURL' => str_replace('SL75','SL200',$current->Product->AttributeSets->children('ns2', true)->ItemAttributes->SmallImage->URL),
                            );
   print_r(" Success was true ");

     }  else {

$amazonResult = array(
                            'isbn' => $parsed_xml->GetMatchingProductForIdResult->attributes()->Id,//$isbn13,
            'ImageURL' => "Jim",
                            );
    print_r(" Success was false ");
}    
    //update image in images table
    print_r(" at the insert statement ");
$conn->query("INSERT INTO images (isbn, image) VALUES ('" . $amazonResult['isbn'] . "', '" . $amazonResult['ImageURL'] . "')");

ループを通過するときに個々の ID を取得するにはどうすればよいですか?

4

1 に答える 1

2

多くの試行錯誤の末の最終的な解決策は次のとおりです。

    $parsed_xml = ProductId_xml($isbn);


  foreach($parsed_xml->GetMatchingProductForIdResult as $item ) {
 $ean =$item->attributes()->Id;
$current = $item->Products;

 $status = $item->attributes()->status;

      if (stristr($status, "Success") == true)
{
        $amazonResult = array(
                            'isbn' => $ean,//$parsed_xml->GetMatchingProductForIdResult->attributes()->Id,
            'ImageURL' => str_replace('SL75','SL200',$current->Product->AttributeSets->children('ns2', true)->ItemAttributes->SmallImage->URL),
                            );

     }  else {

$amazonResult = array(
                            'isbn' => $ean,
            'ImageURL' => "",
                            );

}

foreach ステートメントの後に $item を使用する必要がありました。

于 2012-10-10T17:47:26.037 に答える