private static function Braintree_Xml_Parser::_iteratorToArray in Commerce Braintree 7
processes SimpleXMLIterator objects recursively
@access protected
Parameters
object $iterator:
Return value
array xml converted to array
1 call to Braintree_Xml_Parser::_iteratorToArray()
- Braintree_Xml_Parser::arrayFromXml in braintree_php/
lib/ Braintree/ Xml/ Parser.php - sets up the SimpleXMLIterator and starts the parsing @access public
File
- braintree_php/
lib/ Braintree/ Xml/ Parser.php, line 49
Class
- Braintree_Xml_Parser
- Parses incoming Xml into arrays using PHP's built-in SimpleXML, and its extension via Iterator, SimpleXMLIterator
Code
private static function _iteratorToArray($iterator) {
$xmlArray = array();
$value = null;
// rewind the iterator and check if the position is valid
// if not, return the string it contains
$iterator
->rewind();
if (!$iterator
->valid()) {
return self::_typecastXmlValue($iterator);
}
for ($iterator
->rewind(); $iterator
->valid(); $iterator
->next()) {
$tmpArray = null;
$value = null;
// get the attribute type string for use in conditions below
$attributeType = $iterator
->attributes()->type;
// extract the parent element via xpath query
$parentElement = $iterator
->xpath($iterator
->key() . '/..');
if ($parentElement[0] instanceof SimpleXMLIterator) {
$parentElement = $parentElement[0];
$parentKey = Braintree_Util::delimiterToCamelCase($parentElement
->getName());
}
else {
$parentElement = null;
}
if ($parentKey == "customFields") {
$key = Braintree_Util::delimiterToUnderscore($iterator
->key());
}
else {
$key = Braintree_Util::delimiterToCamelCase($iterator
->key());
}
// process children recursively
if ($iterator
->hasChildren()) {
// return the child elements
$value = self::_iteratorToArray($iterator
->current());
// if the element is an array type,
// use numeric keys to allow multiple values
if ($attributeType != 'array') {
$tmpArray[$key] = $value;
}
}
else {
// cast values according to attributes
$tmpArray[$key] = self::_typecastXmlValue($iterator
->current());
}
// set the output string
$output = isset($value) ? $value : $tmpArray[$key];
// determine if there are multiple tags of this name at the same level
if (isset($parentElement) && $parentElement
->attributes()->type == 'collection' && $iterator
->hasChildren()) {
$xmlArray[$key][] = $output;
continue;
}
// if the element was an array type, output to a numbered key
// otherwise, use the element name
if ($attributeType == 'array') {
$xmlArray[] = $output;
}
else {
$xmlArray[$key] = $output;
}
}
return $xmlArray;
}