170 lines
4.1 KiB
PHP
170 lines
4.1 KiB
PHP
<?php
|
|
/**
|
|
* Zend Framework
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This source file is subject to the new BSD license that is bundled
|
|
* with this package in the file LICENSE.txt.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://framework.zend.com/license/new-bsd
|
|
* If you did not receive a copy of the license and are unable to
|
|
* obtain it through the world-wide-web, please send an email
|
|
* to license@zend.com so we can send you a copy immediately.
|
|
*
|
|
* @category Zend
|
|
* @package Zend_Service
|
|
* @subpackage Ebay
|
|
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
* @version $Id: Abstract.php 22791 2010-08-04 16:11:47Z renanbr $
|
|
*/
|
|
|
|
/**
|
|
* @see Zend_Service_Ebay_Abstract
|
|
*/
|
|
require_once 'Zend/Service/Ebay/Abstract.php';
|
|
|
|
/**
|
|
* @see Zend_Service_Ebay_Finding
|
|
*/
|
|
require_once 'Zend/Service/Ebay/Finding.php';
|
|
|
|
/**
|
|
* @category Zend
|
|
* @package Zend_Service
|
|
* @subpackage Ebay
|
|
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
*/
|
|
abstract class Zend_Service_Ebay_Finding_Abstract
|
|
{
|
|
/**
|
|
* @var DOMElement
|
|
*/
|
|
protected $_dom;
|
|
|
|
/**
|
|
* @var DOMXPath
|
|
*/
|
|
protected $_xPath;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $_attributes = array();
|
|
|
|
/**
|
|
* @param DOMElement $dom
|
|
* @return void
|
|
*/
|
|
public function __construct(DOMElement $dom)
|
|
{
|
|
$this->_dom = $dom;
|
|
$this->_initXPath();
|
|
$this->_init();
|
|
}
|
|
|
|
/**
|
|
* @param string $tag
|
|
* @param string $attribute
|
|
* @return mixed
|
|
*/
|
|
public function attributes($tag, $attribute = null)
|
|
{
|
|
if (null === $attribute) {
|
|
// all attributes
|
|
if (array_key_exists($tag, $this->_attributes)) {
|
|
return $this->_attributes[$tag];
|
|
}
|
|
return array();
|
|
}
|
|
|
|
// a specific attribute
|
|
if (isset($this->_attributes[$tag][$attribute])) {
|
|
return $this->_attributes[$tag][$attribute];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Initialize object.
|
|
*
|
|
* Post construct logic, classes must read their members here. Called from
|
|
* {@link __construct()} as final step of object initialization.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _init()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Load DOMXPath for current DOM object.
|
|
*
|
|
* @see Zend_Service_Ebay_Finding::_parseResponse()
|
|
* @return void
|
|
*/
|
|
protected function _initXPath()
|
|
{
|
|
$document = $this->_dom->ownerDocument;
|
|
if (!isset($document->ebayFindingXPath)) {
|
|
$xpath = new DOMXPath($document);
|
|
foreach (Zend_Service_Ebay_Finding::getXmlNamespaces() as $alias => $uri) {
|
|
$xpath->registerNamespace($alias, $uri);
|
|
}
|
|
$document->ebayFindingXPath = $xpath;
|
|
}
|
|
$this->_xPath = $document->ebayFindingXPath;
|
|
}
|
|
|
|
/**
|
|
* @return DOMElement
|
|
*/
|
|
public function getDom()
|
|
{
|
|
return $this->_dom;
|
|
}
|
|
|
|
/**
|
|
* @return DOMXPath
|
|
*/
|
|
public function getXPath()
|
|
{
|
|
return $this->_xPath;
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @param string $type
|
|
* @param string $array When true means it expects more than one node occurence
|
|
* @return mixed
|
|
*/
|
|
protected function _query($path, $type, $array = false)
|
|
{
|
|
// find values
|
|
$values = array();
|
|
$nodes = $this->_xPath->query($path, $this->_dom);
|
|
foreach ($nodes as $node) {
|
|
$value = (string) $node->nodeValue;
|
|
$values[] = Zend_Service_Ebay_Abstract::toPhpValue($value, $type);
|
|
if (!$array) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
// array
|
|
if ($array) {
|
|
return $values;
|
|
}
|
|
|
|
// single value
|
|
if (count($values)) {
|
|
return reset($values);
|
|
}
|
|
|
|
// no nodes fount
|
|
return null;
|
|
}
|
|
}
|