0

我正在运行一个调用亚马逊 MWS API 的 php 脚本,并且我试图通过 isbn 号查询一本书。

我得到以下返回

SimpleXMLElement Object
(
    [GetMatchingProductResult] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [ASIN] => 1908256052
                    [status] => Success
                )

            [Product] => SimpleXMLElement Object
                (
                    [Identifiers] => SimpleXMLElement Object
                        (
                            [MarketplaceASIN] => SimpleXMLElement Object
                                (
                                    [MarketplaceId] => A1F83G8C2ARO7P
                                    [ASIN] => 1908256052
                                )

                        )

                    [AttributeSets] => SimpleXMLElement Object
                        (
                        )

                    [Relationships] => SimpleXMLElement Object
                        (
                        )

                    [SalesRankings] => SimpleXMLElement Object
                        (
                            [SalesRank] => Array
                                (
                                    [0] => SimpleXMLElement Object
                                        (
                                            [ProductCategoryId] => book_display_on_website
                                            [Rank] => 3304
                                        )

                                    [1] => SimpleXMLElement Object
                                        (
                                            [ProductCategoryId] => 271146
                                            [Rank] => 11
                                        )

                                    [2] => SimpleXMLElement Object
                                        (
                                            [ProductCategoryId] => 1039764
                                            [Rank] => 25
                                        )

                                    [3] => SimpleXMLElement Object
                                        (
                                            [ProductCategoryId] => 270704
                                            [Rank] => 38
                                        )

                                )

                        )

                )

        )

    [ResponseMetadata] => SimpleXMLElement Object
        (
            [RequestId] => bba76d27-9648-4988-b0b6-63b43116d16d
        )

)

当我应该得到类似...

<?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>2767</Rank>
      </SalesRank>
      <SalesRank>
        <ProductCategoryId>271146</ProductCategoryId>
        <Rank>7</Rank>
      </SalesRank>
      <SalesRank>
        <ProductCategoryId>1039764</ProductCategoryId>
        <Rank>24</Rank>
      </SalesRank>
      <SalesRank>
        <ProductCategoryId>270704</ProductCategoryId>
        <Rank>38</Rank>
      </SalesRank>
    </SalesRankings>
  </Product>
</GetMatchingProductResult>
<ResponseMetadata>
  <RequestId>e8dd69e8-7a40-4cab-9793-a666c0648753</RequestId>
</ResponseMetadata>
</GetMatchingProductResponse>

我使用的功能是

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

    return simplexml_load_string($response);
}

有什么我想念的吗?为什么返回不同的结果?

4

1 回答 1

2

该函数simplexml_load_string仅将解释的 XML 作为 SimpleXMLElement 对象返回。请尝试SimpleXMLElement::asXML

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

    // return $xml if you still want to parse the data elsewhere
    $xml = simplexml_load_string($response);

    // return this if you just want the raw XML string
    return $xml->asXML();
}

更新:如何解析和迭代元素...

SimpleXMLElement 对象是可迭代可访问的。这意味着您可以使用它foreach来迭代一个元素:

foreach ($xml->GetMatchingProductResult->Product as $product) {
    // do something for each <Product>, such as output the ASIN...
    echo $product->Identifiers->MarketplaceASIN->ASIN;
}

您可以参考有关Basic SimpleXML 用法的 PHP 文档以获取更多示例。在某些时候,您将不得不处理名称空间。以下是一些额外的资源:

于 2012-10-05T23:22:30.383 回答