2012-02-25 4 views
1

AmazonのZend ServiceはBrowseNodesを提供していないので、私はそれを拡張することにしました。 Zendコードはhttp://framework.zend.com/manual/de/zend.service.amazon.htmlにあります。Amazon BrowseNodesのZend_Serviceを拡張して、祖先は処理されません。

以下のコードはほとんど動作しますが、Just Ancestorsは処理されません。私はwsdlまたはxpathにエラーがあるのだろうかと思います。デバッグしようとしていますが、祖先を処理するだけです。 BrowseNodeId、Name、IsCategoryRoot、子は処理されますが、祖先配列は常に空です。 xpathクエリーは子を見つけることができますが、先祖は見つけることができません。

下記のコードをご覧ください。そして、ここでは、XML

の一部は、ItemLookupでは のXMLエキスのWSDLの解剖学であるhttp://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AnatomyofaWSDL.html

XML応答私はどのように

<BrowseNodes> 
    <BrowseNode> 
     <BrowseNodeId>10605</BrowseNodeId> 
     <Name>Education</Name> 
     <Children>...</Children> 
     <Ancestors> 
      <BrowseNode> 
       <BrowseNodeId>21</BrowseNodeId> 
       <Name>Education & Reference</Name> 
       <Ancestors> 
        <BrowseNode> 
         <BrowseNodeId>1000</BrowseNodeId> 
         <Name>Subjects</Name> 
         <IsCategoryRoot>1</IsCategoryRoot> 
         <Ancestors> 
          <BrowseNode> 
           <BrowseNodeId>283155</BrowseNodeId> 
           <Name>Books</Name> 
          </BrowseNode> 
         </Ancestors> 
        </BrowseNode> 
       </Ancestors> 
      </BrowseNode> 
     </Ancestors> 
    </BrowseNode> 
</BrowseNodes> 

の部分Zend_Service_Amazon_ 商品番号BrowseNodes

class Zend_Service_Amazon_Item 
{ 

    /** 
    * @var array 
    */ 
    public $BrowseNodes = array(); 

    public function __construct($dom) { 

     // .... the code for the other items 

     // .... for browsenode 
     $result = $xpath->query('./az:BrowseNodes/*', $dom); 
     if ($result->length > 1) { 
      /** 
      * @see Zend_Service_Amazon_BrowseNode 
      */ 
      require_once 'Zend/Service/Amazon/BrowseNode.php'; 
      foreach ($result as $r) { 
       $this->BrowseNodes[] = new Zend_Service_Amazon_BrowseNode($r); 
      } 
     } 
    } 
} 

私は、私は答えを見つけたBrowseNodes

class Zend_Service_Amazon_BrowseNode 
{ 
    /** 
    * @var integer 
    */ 
    public $BrowseNodeId; 

    /** 
    * @var string 
    */ 
    public $Name; 

    /** 
    * @var boolean 
    */ 
    public $IsCategoryRoot; 


    /** 
    * @var array BrwoserNodes 
    */ 
    public $Ancestors = array(); 

    /** 
    * @var string 
    */ 
    public $Children = array(); 

    /** 
    * Assigns values to properties relevant to BrowseNode 
    * 
    * @param DOMElement $dom 
    * @return void 
    */ 
    public function __construct(DOMElement $dom) 
    { 

     $xpath = new DOMXPath($dom->ownerDocument); 
     $xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2011-08-01'); 
     foreach (array('BrowseNodeId', 'Name') as $el) { 
      $result = $xpath->query("./az:$el/text()", $dom); 
      if ($result->length == 1) { 
       $this->$el = (string) $result->item(0)->data; 
      } 
     } 

     $result = $xpath->query('./az:IsCategoryRoot/text()', $dom); 
     if ($result->length == 1) { 
      $this->IsCategoryRoot = (bool) $result->item(0)->data ; 
     } 

     foreach (array('Children','Ancestors') as $el) { 
      $result = $xpath->query("./$el/*", $dom); 
      if ($result->length > 1) { 
       foreach ($result as $r) { 
        array_push($this->$el, new Zend_Service_Amazon_BrowseNode($r)); 
       } 
      } 
     } 
    } 
} 

答えて

0

のための新しいクラスを作成し、それはあまりにも他のに役立ちます願っています。 2個のエラーがあります

:の略ですが、それが必要とされている:

  1. は私が何AZ分かりません。私は唯一の祖先でテストしてきた

    $result = $xpath->query("./az:$el/*", $dom); 
    
  2. 、私は2つ以上のノードでは、持っている場合は、真である場合で引数:代わりに「AZ」で

    $result = $xpath->query("./$el/*", $dom); 
    

    の結果。 WSDLによれば、複数の祖先を持つBrowseNodesで結果を得ることはできましたが、それらはまれであるか、唯一の祖先しか持たないアイテムしか探していませんでした。

    if ($result->length > 1) { 
    

    は次のようになります。

    if ($result->length > 0) { 
    

もう一度Zend_Service_Amazon_BrowseNode

foreach (array('Children','Ancestors') as $el) { 
     $result = $xpath->query("./az:$el/*", $dom); 
     if ($result->length > 0) { 
      foreach ($result as $r) { 
       array_push($this->$el, new Zend_Service_Amazon_BrowseNode($r)); 
      } 
     } 
    } 
の最後の部分で修正されたコード
関連する問題