Мне нужно преобразовать / проанализировать следующий XML в ассоциативный массив. Я попытался с помощью функции simplexml_load_string PHP, но он не извлекал атрибуты в качестве ключевого элемента.
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <OPS_envelope> <header> <version>0.9</version> </header> <body> <data_block> <dt_assoc> <item key="protocol">XCP</item> <item key="object">DOMAIN</item> <item key="response_text">Command Successful</item> <item key="action">REPLY</item> <item key="attributes"> <dt_assoc> <item key="price">10.00</item> </dt_assoc> </item> <item key="response_code">200</item> <item key="is_success">1</item> </dt_assoc> </data_block> </body> </OPS_envelope>
Мне нужны приведенные выше данные XML, такие как key => value.
array('protocol' => 'XCP', 'object' => 'DOMAIN', 'response_text' => 'Command Successful', 'action' => 'REPLY', 'attributes' => array( 'price' => '10.00' ), 'response_code' => '200', 'is_success' => 1 )
Вы можете использовать DOMDocument
и XPath
чтобы делать то, что вы хотите:
$data = //insert here your xml $DOMdocument = new DOMDocument(); $DOMdocument->loadXML($data); $xpath = new DOMXPath($DOMdocument); $itemElements = $xpath->query('//item'); //obtain all items tag in the DOM $argsArray = array(); foreach($itemElements as $itemTag) { $key = $itemTag->getAttribute('key'); //obtain the key $value = $itemTag->nodeValue; //obtain value $argsArray[$key] = $value; }
Вы можете найти дополнительную информацию, нажав DOMDocument или XPath
Я вижу, что у вас есть узел, у которого есть лист.
<item key="attributes"> <dt_assoc> <item key="price">10.00</item> </dt_assoc> </item>
Очевидно, что в этом случае вам нужно снова «переместить» эту «под-DOM», чтобы получить то, что вы ищете.
Prasanth ответ также хорош, но будет производить и так далее, как ключи, и я не знаю, если это то, что вы хотите.