Php xml string to array

Parse XML to an Array in PHP With SimpleXML

Sajal Soni

Sajal Soni Last updated Aug 12, 2020

In this post, you’ll learn how to parse XML into an array in PHP. SimpleXML is a PHP extension that makes this possible.

In your day-to-day PHP development, sometimes you’ll need to deal with XML content. Whether it’s exporting data as XML documents or processing incoming XML documents in your application, it’s always handy to have a library that can perform these operations smoothly. When it comes to dealing with XML in PHP, there are different methods to choose from. In fact, there are different extensions available in PHP that allow you to read and parse XML documents.

PHP’s XML parser is based on James Clark’s expat library, which is a stream-oriented XML library written in C. This XML parser library allows you to parse XML documents, but it’s not able to validate them. It’s event-based and stream-oriented, and thus it’s really useful when you’re dealing with very large XML files—but a little more complicated than it needs to be for small files.

The other option is the SimpleXML extension, which is one of the most popular extensions used by the PHP community to process XML documents. The SimpleXML extension allows you to parse XML documents very easily, just as if you were reading a file in PHP.

In this article, we’re going to use the SimpleXML extension to demonstrate how you could convert XML content into an array. If you want to follow along with the example in this article, make sure that you’ve installed the SimpleXML extension in your PHP installation.

The SimpleXML PHP Extension

The SimpleXML PHP extension provides a complete toolset which you can use to read, write and parse XML documents in your PHP applications. It’s important to note that the SimpleXML extension requires PHP 5 at a minimum. Also, it requires the libxml PHP extension.

Читайте также:  Таблица размеров обуви

The SimpleXML extension is enabled by default, but if you want to check if it’s enabled in your PHP installation, you can check it quickly by using the phpinfo() function.

The phpinfo Function

As you can see, you should see the SimpleXML section in the output of the phpinfo() function.

The SimpleXML extension provides different functions that you could use to read and parse XML content.

Loading an XML String or File With SimpleXML

For example, if you want to parse the XML file, you can use the simplexml_load_file() function. The simplexml_load_file() function allows you to read and parse the XML file in a single call. On the other hand, if you have an XML string which you want to convert into an XML document object, you can use the simplexml_load_string() function.

You could also use the file_get_contents() function to read the file contents and pass the resulting string to the simplexml_load_string() function, which eventually parses it into an object. Alternatively, if you prefer the object-oriented way, you could also use the SimpleXMLElement class and its utility methods to convert an XML string into an object.

In this article, we’re going to use the simplexml_load_file() function to read an XML file, and we’ll see how to convert it into an array. Next, we’ll go through a real-world example to demonstrate how to do this.

How to Convert XML to an Array With PHP

In this section, we’ll see how you can convert XML content into an array.

First of all, let’s quickly go through the steps that you need to follow to convert XML content into an array with the help of the SimpleXML extension.

  • Read the file contents and parse them. At the end of this step, the content is parsed and converted into the SimpleXMLElement object format. We’re going to use the simplexml_load_file() function to achieve this.
  • Next, you need to convert the SimpleXMLElement object into a JSON representation by using the json_encode() function.
  • Finally, you need to use the json_decode() function to decode the JSON content so that it eventually generates an array of all documents.

For demonstration purposes, let’s assume that we have an XML file as shown in the following snippet. We’ll call it employees.xml. It contains the basic details of all employees. Our aim is to convert it into an array that you could use for further processing.

Читайте также:  Create Record

Источник

Как конвертировать XML в ассоциативный массив

Как конвертировать XML в ассоциативный массив

Работая над своим последним проектом, у меня появилась острая необходимость в парсинге xml-файла, и конвертации его в ассоциативный массив. Прежде всего хотелось сделать это всё без использования сторонних библиотек, исключительно нативными средствами PHP. И в этой статье я покажу, что у меня получилось, и как конвертировать xml в ассоциативный массив.

Решений этой проблемы, найденных в гугле было достаточно. Я нашел несколько разных способов, несколько библиотек, которые решали мои задачи. Но, как я уже написал выше, мне хотелось что-то простое, эффективное, и без использования сторонних библиотек. И, как мне кажется, я нашел оптимальный вариант конвертации XML в ассоциативный массив. И, для работы этого способа, достаточно будет всего одной PHP функции (для чтения файла) — file_get_contents().

В этой статье вы узнаете, как конвертировать XML в массив на PHP.

Шаг 1: Исходный XML-файл

Хотелось сделать дефолтный пример, с дефолтным файлом, как делают в дефолтных статьях. Но сегодня я решил добавить в эту статью реальный пример из проекта.

source

Поставим перед собой задачу: нужно парсить курсы валют из API, которые отдаются в XML. Погуглив, я нашел API finance.ua, которое решает нашу задачу, и отдаёт такой XML-файл. И на его примере мы и будем рассматривать текущую тему.

Шаг 2: конвертируем содержимое XML-файла в строку

Для этого, как ранее и было написано, используется функция file_get_contents(). Присвоим содержимое файла переменной, для удобной работы с данными:

$url = 'http://resources.finance.ua/ru/public/currency-cash.xml'; $xml = file_get_contents($url);

Шаг 3: конвертация XML строки в объект

Теперь, стандартными средствами PHP, можно XML-строку преобразовать в объект, в котором к тегам можно обращаться по цепочке свойств объекта, например:

$xml_data->organizations->organization[0]->title['value']; // название первой организации из списка, т.е. Universal Bank 

Для этого воспользуемся функцией simplexml_load_string(), которой нужно передать XML строку:

$xml_data = simplexml_load_string($xml); // XML объект

И, обычно, в таком виде уже работают с XML-объектом, вызывая нужные методы/цепочки свойств. Но, в таком виде, работа с XML не всегда очевидна, особенно для новичков, потому, многие стремятся к тому, чтобы конвертировать XML в массив, так как это более привычный и удобный вариант работы с данными. И, к сожалению, в объекте $xml_data не существует магического метода ->toArray() , который конвертировал бы всю цепочку элементов в ассоциативный массив. Но, мы знаем, как сделать это самим.

Читайте также:  Какие версии css существуют

Шаг 4: Конвертация XML-объекта в ассоциативный массив

Теперь текущий объект $xml_data нужно преобразовать в JSON с помощью функции json_encode() .

$json = json_encode($xml_data); // json строка

После чего, нужно выполнить обратные действия, т.е. декодировать JSON в массив, используя функция json_decode() :

$json_data = json_decode($json, true); // ассоциативный массив

Здесь может показаться немного нелогичным то, что сначала вызывается функция json_encode , а после чего, сразу json_decode . Но учитывая механику работы этих функций, всё сразу же становится на свои места.
json_encode — вырезает все лишние свойства, и конвертирует объект в JSON строку, оставляя только полезные данные
json_decode — преобразует JSON строку в массив

associative

И, учитывая, что все ненужные данные были вырезаны, то ассоциатиыный массив, не содержит ничего лишнего:

Чего уже вполне достаточно для использования на практике, оперируя массивом.

Теперь в массиве все атрибуты элементов доступны под ключом @attributes, а элементы под ключом имени:

$organization = $json_data['organizations']['organization'][0]; // первая организация 
$title = $organization['title']['@attributes']['value']; // title организации
$currencies = $organization = $organization['currencies']['c']; // курсы валют организации

Резюме

Вот так, оказывается просто можно преобразовать XML в ассоциативный массив. Нам для этого понадобилось не больше, чем 4 строки:

$xml = file_get_contents('http://resources.finance.ua/ru/public/currency-cash.xml'); 
$xml_data = simplexml_load_string($xml);
$json = json_encode($xml_data);
$json_data = json_decode($json, true);

И, помимо того, что вы теперь знаете, как происходит преобразование XML в массив, вы так же знаете, откуда спарсить курсы валют ^^.

В серці. Назавжди.

В серці. Назавжди.

Вчора у мене помер однокласник. А сьогодні бабуся. І хто б міг уявити, що цей рік принесе війну, смерть товариша, та смерть члена сім’ї? Це боляче. Проте це добре нагадування про те, як швидко тече час. І як його ціна збільшується кожної марно витраченої секунди. І я не скажу щось

Ось такий він, руський мир

Ось такий він, руський мир

«Руський мир» — звучить дуже сильно та виправдовуюче. Гарна обгортка виправдання слабкості, аморальності та нікчемності своїх дійсних намірів. Руський мир, який дуже солодко звучить для всіх, хто хоче закрити очі на факт повномасштабної війни. Дуже добре виправдання вбивства для купки звірів. Втім, це ж росія, в якій все виглядає логічно

Перехват запросов и ответов JavaScript Fetch API

Перехват запросов и ответов JavaScript Fetch API

Перехватчики — это блоки кода, которые вы можете использовать для предварительной или последующей обработки HTTP-вызовов, помогая в обработке глобальных ошибок, аутентификации, логирования, изменения тела запроса и многом другом. В этой статье вы узнаете, как перехватывать вызовы JavaScript Fetch API. Есть два типа событий, для которых вы можете захотеть перехватить HTTP-вызовы:

Источник

Оцените статью