Converting a SimpleXML Object to an Array: A More Efficient Approach
Converting a SimpleXML object to an array can be useful for manipulating XML data more efficiently. However, the method described in the initial question, which involves encoding and decoding JSON, can be cumbersome. Here's an improved approach to achieve the same:
function xmlstring2array($string) {
$xml = simplexml_load_string($string); return xml2array($xml);
}
function xml2array($xmlObject) {
foreach ((array) $xmlObject as $index => $node) { if (is_object($node)) { $out[$index] = xml2array($node); } else { $out[$index] = $node; } } return $out;
}
This revised function, xml2array(), recursively iterates through the SimpleXML object, converting nodes into arrays while preserving their structure. It avoids the JSON encoding and decoding overhead, making it more efficient and robust.
The original function lost attributes when converting XML to an array. However, you can preserve attributes by using SimpleXML's attributes() method within the loop of xml2array():
foreach ((array) $xmlObject as $index => $node) {
... if (is_object($node)) { $out[$index] = xml2array($node); } else if ($node instanceof SimpleXMLElement) { $attrs = $node->attributes(); if (count($attrs) > 0) { $out[$index] = (array) $node; foreach ($attrs as $attrName => $attrValue) { $out[$index][$attrName] = (string) $attrValue; } } else { $out[$index] = (string) $node; } } ...
}
By incorporating these improvements, you can convert SimpleXML objects to arrays more efficiently, preserving both structure and attributes.
The above is the detailed content of How to Convert a SimpleXML Object to an Array Efficiently and Preserve Attributes?. For more information, please follow other related articles on the PHP Chinese website!