Intereting Posts
Как сделать несколько языковых сайтов с включенными соответствующими файлами на PHP? Поиск n-й перестановки без вычисления других Как получить имя столбца, значение которого не равно null в mysql facebook graph api & php sdk, удаление событий! Распечатка результатов запроса в таблице Множественные атрибуты стирания входящего соединения PDO + MySQL и сломанная кодировка UTF-8 Определите, существует ли комбинация записей «много ко многим» Curl – заголовки Retrive – пустой ответ Как установить флажок с несколькими массивами с форматами html Вызовите скрипт PHP со страницы JSP и покажите его вывод на странице JSP Захватить текущий первый и последний день недели в php При использовании PHP включить странный верхний край Какой HTML Parser (желательно PHP) поддерживает получение смещения текущего узла во входной строке? Почему мой сайт всегда использует ErrorController для всех типов ошибок независимо от кода состояния HTTP?

Проблема с синтаксисом PHP SimpleXML

Я получаю следующее возвращенное из 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 .

Затем вы можете использовать различные методы для доступа к узлам и получения атрибутов.