1

I am trying to extract data from the following xml with no luck.

<?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>3304</Rank>
      </SalesRank>
      <SalesRank>
        <ProductCategoryId>271146</ProductCategoryId>
        <Rank>11</Rank>
      </SalesRank>
      <SalesRank>
        <ProductCategoryId>1039764</ProductCategoryId>
        <Rank>25</Rank>
      </SalesRank>
      <SalesRank>
        <ProductCategoryId>270704</ProductCategoryId>
        <Rank>38</Rank>
      </SalesRank>
    </SalesRankings>
  </Product>
</GetMatchingProductResult>
<ResponseMetadata>
  <RequestId>8d4fde2b-d2bb-4c06-800d-68eec2effcf3</RequestId>
</ResponseMetadata>
</GetMatchingProductResponse>

I am using the following function to return and process repsonses

public function getXML2($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);

    $xml = simplexml_load_string($response, NULL, NULL, "http://mws.amazonservices.com/schema/Products/2011-10-01");
    $xml->registerXPathNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd');
    return $xml;

}

When I try to loop through data I am not able to return anything

foreach($xml->xpath('//ns2:ItemAttributes') as $event) {
    $event->registerXPathNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd');
    echo var_export($event->xpath('//ns2:author'));
}

What am I doing wrong?

1 Answer 1

2

Did you try DOMDocument ?

$dom = new DOMDocument;
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$xpath->registerNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd');

$el = $xpath->query('//ns2:ItemAttributes/ns2:Author');
var_dump($el->item(0)->nodeValue);

//string(14) "Slimming World"
Sign up to request clarification or add additional context in comments.

1 Comment

should this be added before the for loop?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.