W3docs

simplexml_load_string()

SimpleXML — расширение PHP для работы с XML-документами. Функция simplexml_load_string() загружает XML из строки и создаёт объект SimpleXMLElement.

Введение

SimpleXML — это расширение PHP, которое предоставляет простой и удобный API для работы с XML-документами. Функция simplexml_load_string() является одной из многих функций, предоставляемых SimpleXML для работы с XML-документами. Это мощный инструмент, позволяющий загрузить XML-документ из строки и создать объект SimpleXMLElement. В этой статье мы подробно рассмотрим функцию simplexml_load_string() и способы её применения в PHP.

Понимание функции simplexml_load_string()

Функция simplexml_load_string() в PHP загружает XML-документ из строки и создаёт объект SimpleXMLElement. (Примечание: это процедурный подход; объектно-ориентированным эквивалентом является new SimpleXMLElement($string).) Синтаксис использования функции simplexml_load_string() выглядит следующим образом:

Синтаксис

simplexml_load_string ( string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] ) : SimpleXMLElement

Здесь $data — строка, содержащая загружаемый XML-документ. $class_name — необязательный параметр, задающий имя класса для объекта SimpleXMLElement. $options — необязательный параметр, задающий дополнительные параметры загрузки XML-документа. $ns — необязательный параметр, задающий пространство имён для XML-документа. $is_prefix — необязательный параметр, указывающий, является ли пространство имён префиксом.

Пример использования

Рассмотрим пример, демонстрирующий использование функции simplexml_load_string() в PHP:

Пример использования функции simplexml_load_string() в PHP

php— editable, runs on the server

В приведённом выше примере мы сначала создаём строку, содержащую XML-документ. Затем используем функцию simplexml_load_string(), чтобы загрузить XML-документ из строки и создать объект SimpleXMLElement. С помощью цикла foreach мы перебираем каждый элемент book в XML-документе и выводим название каждой книги.

Если ваш XML-источник — файл или URL, а не строка, используйте вместо этого simplexml_load_file().

Чтение атрибутов

Атрибуты XML доступны через синтаксис массива ($element['attrName']), тогда как дочерние элементы используют синтаксис свойств ($element->child). Это наиболее распространённая ошибка для новичков:

<?php

$xmlString = '<books><book id="1"><title>PHP Basics</title></book></books>';
$xml = simplexml_load_string($xmlString);

foreach ($xml->book as $book) {
  echo "ID: " . $book['id'] . " - Title: " . $book->title . "\n";
}

Этот код выведет ID: 1 - Title: PHP Basics. Обратите внимание, что значения атрибутов сами являются объектами SimpleXMLElement, поэтому приводите их к (string) или (int), если вам нужен обычный скалярный тип.

Использование параметра options

Третий параметр принимает константы параметров libxml, изменяющие способ разбора документа. Часто используемой является LIBXML_NOCDATA, которая объединяет секции CDATA с обычными текстовыми узлами, позволяя читать их как обычный контент:

<?php

$xmlString = '<note><body><![CDATA[Hello <b>world</b>]]></body></note>';
$xml = simplexml_load_string($xmlString, "SimpleXMLElement", LIBXML_NOCDATA);

echo (string) $xml->body . "\n";

Без LIBXML_NOCDATA значение $xml->body будет пустым при обращении к нему как к строке, поскольку содержимое находится в узле CDATA.

Обработка ошибок

По умолчанию simplexml_load_string() выдаёт предупреждения, если XML-документ некорректен. Для graceful-обработки ошибок можно использовать libxml_use_internal_errors():

<?php

$xmlString = '<books><book><title>PHP Basics</title></books>'; // Missing closing </book> tag
libxml_use_internal_errors(true);
$xml = simplexml_load_string($xmlString);

if ($xml === false) {
  foreach (libxml_get_errors() as $error) {
    echo "Error: ", trim($error->message), "\n";
  }
} else {
  foreach($xml->book as $book) {
    echo $book->title . "\n";
  }
}

Когда XML-документ некорректен, simplexml_load_string() возвращает false вместо выброса исключения. Вызов libxml_use_internal_errors(true) подавляет стандартные предупреждения и позволяет проверять собранные ошибки с помощью libxml_get_errors(). Всегда проверяйте возвращаемое значение на false перед использованием результата.

Заключение

simplexml_load_string() разбирает XML-строку в объект SimpleXMLElement, предоставляя объектный доступ к дочерним элементам ($xml->child) и доступ через массив к атрибутам ($xml['attr']). Используйте эту функцию, когда XML уже находится в памяти; применяйте simplexml_load_file(), когда XML находится в файле или по URL. Для надёжного кода включайте внутреннюю обработку ошибок libxml и проверяйте возвращаемое значение перед чтением результата. Для более глубокого изучения SimpleXML API смотрите обзор SimpleXML.

Практика

Практика
Что делает функция 'simplexml_load_string' в PHP согласно https://www.w3docs.com/learn-php/simplexml-load-string.html?
Что делает функция 'simplexml_load_string' в PHP согласно https://www.w3docs.com/learn-php/simplexml-load-string.html?
Was this page helpful?