Я получаю следующее возвращенное из api, с которым я работаю. Однако, используя SIMPLEXML, я не могу получить доступ к значениям:
<?xml version="1.0" encoding="utf-16"?> <Response Version="1.0"> <DateTime>2/13/2013 10:37:24 PM</DateTime> <Contact_ID>151-233-DD</Contact_ID> <Quote_ID>ojc332-ewied-23e3ed</Quote_ID> <Status>Failure</Status> <Reason>Incorrect Contact ID</Reason> </Response>
Я настраиваю это на:
$variable = new SimpleXMLElement($results);
SIMPLEXML дает мне следующее вместо того, что я ожидаю быть переменной $ variable-> DateTime:
SimpleXMLElement Object ( [0] => 2/13/2013 10:37:24 PM 151-233-DD 0jc332-ewied-23e3ed Failure Incorrect Contract ID )
Любая помощь высоко ценится
Кажется, это вызывает тип кодировки utf-16
тогда как контент имеет utf-8
.
Поэтому вам нужно изменить тип кодировки,
$string = '<?xml version="1.0" encoding="utf-16"?> <Response Version="1.0"> <DateTime>2/13/2013 10:37:24 PM</DateTime> <Contact_ID>151-233-DD</Contact_ID> <Quote_ID>ojc332-ewied-23e3ed</Quote_ID> <Status>Failure</Status> <Reason>Incorrect Contact ID</Reason> </Response>'; $xml = simplexml_load_string(preg_replace('/(<\?xml[^?]+?)utf-16/i', '$1utf-8', $string));
Codepad DEMO .
Также это можно сделать с помощью utf8_encode
,
$xml = simplexml_load_string(utf8_encode($string));
Вы строите только один элемент XML (назовите имя класса). Вам нужно загрузить всю строку в виде XML-документа. Вот как это сделать:
<?php $result= <<<XML <?xml version="1.0" encoding="utf-8"?> <Response Version="1.0"> <DateTime>2/13/2013 10:37:24 PM</DateTime> <Contact_ID>151-233-DD</Contact_ID> <Quote_ID>ojc332-ewied-23e3ed</Quote_ID> <Status>Failure</Status> <Reason>Incorrect Contact ID</Reason> </Response> XML; $dom= new DOMDocument(); $dom->loadXML($result, LIBXML_NOBLANKS);
Затем вы можете использовать интерфейс DOM для доступа к различным компонентам документа.
например
$dates = dom->getElementsByTagName('DateTime');
Это позволит получить массив, содержащий все элементы DateTime
.
РЕДАКТИРОВАТЬ
Oops – $dates
DOMNodeList
будет объектом DOMNodeList
.
Затем вы можете использовать различные методы для доступа к узлам и получения атрибутов.