_current_tag = $name;
$attribs = array_change_key_case($attribs,CASE_LOWER);
if ($this->debug) echo " + startHandler() : $name
";
if ( $name == "ShipRate"
&& isset($this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"])
&& is_array($this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"][$this->_pkg_cnt])){
parent::startHandler($xp, $name, $attribs);
} else {
switch ($name) {
case 'ItemShipRate': $this->dom = array();
break;
case 'ShipRateList': xml_set_character_data_handler($this->parser,'cdataHandler_ShipRate');
$this->dom['ShipRate'] = array();
break;
case 'ShipRate': $this->dom['ShipRate'][$this->_rate_cnt] = array();
break;
case 'PackageDetail':$this->_pkg_cnt = 0;
break;
case 'Package': xml_set_character_data_handler($this->parser,'cdataHandler_Package');
$this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"][$this->_pkg_cnt] = array();
$this->_pkgItem_cnt = 0;
break;
case 'PkgItem': xml_set_character_data_handler($this->parser,'cdataHandler_PkgItem');
$this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"][$this->_pkg_cnt]["PkgItem"][$this->_pkgItem_cnt] = array();
break;
default: parent::startHandler($xp, $name, $attribs);
}
}
}
/**
* Handle end element
*
* @access private
* @param resource xml parser resource
* @param string name of the element
*/
function endHandler($xp, $name)
{
$this->_current_tag = null; // <<<<< WATCH THIS, cdataHandlers called 3 times: tag space and \n
if ($this->debug) echo " + endHandler() : $name
";
if ( $name == "ShipRate" && isset($this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"][$this->_pkg_cnt])){
parent::endHandler($xp, $name);
} else {
switch ($name) {
case 'ItemShipRate': xml_set_character_data_handler($this->parser,'cdataHandler');
break;
case 'ShipRateList': xml_set_character_data_handler($this->parser,'cdataHandler');
break;
case 'ShipRate': $this->_rate_cnt++;
break;
case 'PackageDetail': xml_set_character_data_handler($this->parser,'cdataHandler_ShipRate');
break;
case 'Package': $this->_pkg_cnt++;
break;
case 'PkgItem': $this->_pkgItem_cnt++;
break;
default: parent::endHandler($xp, $name);
}
}
}
//////////////////////////////////////////////////////////////////////////
// Custom CDATA Handlers
//////////////////////////////////////////////////////////////////////////
/**
* Handle character data within SHIPRATE element
*
* @access private
* @param resource xml parser resource
* @param string value of the resource
*/
function cdataHandler_ShipRate($xp, $val)
{
static $map;
if ($this->_err_state || empty($this->_current_tag)) return;
if (!isset($map)) {
$map = array(
'valid' => 'Valid',
'carriercode' => 'CarrierCode',
'servicecode' => 'ServiceCode',
'servicename' => 'ServiceName',
'calcmethod' => 'CalcMethod',
'rate' => 'Rate',
'carrierrate' => 'CarrierRate',
'fixedrate' => 'FixedRate',
'surcharges' => 'Surcharges',
'fuelsurcharges' => 'FuelSurcharges',
'handlingfees' => 'HandlingFees',
'declaredvalue' => 'DeclaredValue',
'insurancecharges' => 'InsuranceCharges',
'weight' => 'Weight',
'packagecount' => 'PackageCount',
'flatratecode' => 'FlatRateCode');
}
$this->cdataAdapter($val, $map, $this->_rate_cnt, $this->dom['ShipRate']);
}
/**
* Handle character data within PACKAGE element
*
* @access private
* @param resource xml parser resource
* @param string value of the resource
*/
function cdataHandler_Package($xp, $val)
{
static $map;
if ($this->_err_state || empty($this->_current_tag)) return;
if (!isset($map)) {
$map = array(
'quantity' => 'Quantity',
'packmethod' => 'PackMethod',
'origin' => 'Origin',
'declaredvalue' => 'DeclaredValue',
'weight' => 'Weight',
'length' => 'Length',
'width' => 'Width',
'height' => 'Height',
'oversizecode' => 'OversizeCode',
'splitcode' => 'SplitCode',
'flatratecode' => 'FlatRateCode',
'carrierrate' => 'CarrierRate',
'fixedrate' => 'FixedRate',
'surcharge' => 'Surcharge',
'fuelsurcharge' => 'FuelSurcharge',
'insurance' => 'Insurance',
'handling' => 'Handling',
'shiprate' => 'ShipRate');
}
$this->cdataAdapter($val, $map, $this->_pkg_cnt, $this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"]);
}
/**
* Handle character data within PKGITEM element
*
* @access private
* @param resource xml parser resource
* @param string value of the resource
*/
function cdataHandler_PkgItem($xp, $val)
{
static $map;
if ($this->_err_state || empty($this->_current_tag)) return;
if (!isset($map)) {
$map = array(
'refcode' => 'RefCode',
'qty' => 'Qty',
'weight' => 'Weight');
}
$this->cdataAdapter($val, $map, $this->_pkgItem_cnt, $this->dom['ShipRate'][$this->_rate_cnt]["PackageDetail"][$this->_pkg_cnt]["PkgItem"]);
}
/**
* Handle character data within ItemShipRate element
*
* @access private
* @param resource xml parser resource
* @param string value of the resource
*/
function cdataHandler($xp, $val)
{
static $map;
if ($this->_err_state || empty($this->_current_tag)) return;
$map = array('currency' => 'Currency');
$this->cdataAdapter($val, $map, null, $this->dom);
}
}
?>