0

これが私のAmazon mws API応答です

<?xml version="1.0"?>
<GetMyPriceForSKUResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<GetMyPriceForSKUResult SellerSKU="ds-tru-6sss" 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>Assssssss</MarketplaceId>
        <ASIN>sss</ASIN>
      </MarketplaceASIN>
      <SKUIdentifier>
        <MarketplaceId>Afasrfd</MarketplaceId>
        <SellerId>ssssss</SellerId>
        <SellerSKU>dssss</SellerSKU>
      </SKUIdentifier>
    </Identifiers>
    <Offers>
      <Offer>
        <BuyingPrice>
          <LandedPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>12.49</Amount>
          </LandedPrice>
          <ListingPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>12.49</Amount>
          </ListingPrice>
          <Shipping>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
          </Shipping>
        </BuyingPrice>
        <RegularPrice>
          <CurrencyCode>USD</CurrencyCode>
          <Amount>12.49</Amount>
        </RegularPrice>
        <FulfillmentChannel>MERCHANT</FulfillmentChannel>
        <ItemCondition>New</ItemCondition>
        <ItemSubCondition>New</ItemSubCondition>
        <SellerId>Aadada</SellerId>
        <SellerSKU>ssss</SellerSKU>
      </Offer>
      <Offer>
        <BuyingPrice>
          <LandedPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>1000.00</Amount>
          </LandedPrice>
          <ListingPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>1000.00</Amount>
          </ListingPrice>
          <Shipping>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
          </Shipping>
        </BuyingPrice>
        <RegularPrice>
          <CurrencyCode>USD</CurrencyCode>
          <Amount>1000.00</Amount>
        </RegularPrice>
        <FulfillmentChannel>MERCHANT</FulfillmentChannel>
        <ItemCondition>New</ItemCondition>
        <ItemSubCondition>New</ItemSubCondition>
        <SellerId>ssss</SellerId>
        <SellerSKU>sss</SellerSKU>
      </Offer>
    </Offers>
  </Product>
</GetMyPriceForSKUResult>
<ResponseMetadata>
  <RequestId>e0ef1c2c-4f35-4316-8629-faadadd</RequestId>
</ResponseMetadata>
</GetMyPriceForSKUResponse>

から選択amount (12.49)する

<ListingPrice>
    <CurrencyCode>USD</CurrencyCode>
    <Amount>12.49</Amount>
</ListingPrice>

やっています 、

// from curl
$result = curl_exec ($ch);
$xmldoc = new DOMDocument();
$xmldoc->load($result);
$xpathvar = new Domxpath($xmldoc);

$queryResult = $xpathvar->query('/Amount');
foreach($queryResult as $result){
    echo $result;
}

これには複数の値を期待していますが、まったく得られません。

申し訳ありませんが、私は XPath が苦手です。誰かが私を案内してくれますか?

4

3 に答える 3

2

現在、あなたのコードにエラーが見つかりました:


1 つ目: //XML ツリーのどこにあるかに関係なく、2 を使用して要素を選択します。

 $queryResult = $xpathvar->query('//Amount');

2番目:@Ranonに感謝します。ドキュメントの xml 名前空間を処理します。

// Register Namespace mws
$xpathvar->registerNamespace("mws", 'http://mws.amazonservices.com/schema/Products/2011-10-01');

...そしてそれを使用すると、次のことを意味します。

 $queryResult = $xpathvar->query('//mws:Amount');

3 番目: (ノード間の) テキスト ノードを選択する場合は、<amount>次を使用する必要があります。

$queryResult = $xpathvar->query('//mws:Amount/text()');

それ以外の場合は、(既に行っているように) 親要素を選択し、<Amount>PHP で値を取得できます。次に、コードを次のように変更する必要があります。

$queryResult = $xpathvar->query('//mws:Amount');
foreach($queryResult as $result){
   echo $result->nodeValue; // echo the node value, not the node 'itself'
}

4 番目: コード内の別のエラーにも注意してください。xml 文字列から DOMDocument を作成する場合は、次を使用する必要があります。

$document->loadXML($result);

<Amount>5 番目:要素内の要素フォームを取得することを伝えました<ListingPrice><Amount>要素内にも要素があることに注意してください<RegularPrice>。したがって、要素がツリー内のどこにあるかは重要です。<Amount>次のクエリを使用して、リスト価格の金額のみを取得します。

$queryResult = $xpathvar->query('//mws:ListingPrice/mws:Amount');
于 2013-01-30T22:05:20.727 に答える
2

Amazon は、宣言して使用する必要がある名前空間を使用して XML を返します。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// from curl
$result = curl_exec($ch);
$xmldoc = new DOMDocument();
$xmldoc->loadXML($result);
$xpathvar = new Domxpath($xmldoc);
// Register Namespace mws
$xpathvar->registerNamespace("mws", 'http://mws.amazonservices.com/schema/Products/2011-10-01');

// Query using namespace mws
$queryResult = $xpathvar->query('//mws:Amount');
foreach($queryResult as $result){
    echo $result->nodeValue;
}

サブドメインから名前空間識別子をmws任意に選択しました。必要に応じて別のものを選択できます。

@hek2mgl が見つけたコードの他のいくつかのエラーを修正しました。

于 2013-01-30T22:27:05.310 に答える
0

XPath 式が間違っています。'//Amount'すべての「金額」要素を選択する必要があります

于 2013-01-30T22:05:12.723 に答える