我正在尝试解析XML文档。当我查看var_dump时,我可以获得所有信息,但我需要做的是从文档中提取Id和图像URL。我已经尝试过为每个循环使用一个循环,它将循环正确的次数,但我需要的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?
答案 0 :(得分: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。