W3docs

addAttribute()

SimpleXML — расширение PHP с простым API для работы с XML-документами. Функция SimpleXMLElement::addAttribute() добавляет атрибуты к элементам.

Введение

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

Синтаксис

addAttribute() — это метод объекта SimpleXMLElement. Он добавляет атрибут к элементу, для которого вызван, и не возвращает значения (void):

public SimpleXMLElement::addAttribute(
    string $name,
    string $value = "",
    ?string $namespace = null
): void
ПараметрОбязательныйОписание
$nameДаИмя добавляемого атрибута (например, id или xml:lang).
$valueНетЗначение атрибута. По умолчанию — пустая string.
$namespaceНетURI пространства имён, к которому относится атрибут. Опускается для обычного атрибута без пространства имён.

Поскольку метод изменяет элемент на месте, результат не нужно присваивать переменной — новый атрибут просто появляется на элементе после вызова.

Базовый пример

Наиболее распространённое использование — добавление одного или нескольких атрибутов к только что созданному элементу:

php— editable, runs on the server

Этот код создаёт элемент <book>, добавляет к нему атрибут isbn, затем добавляет два дочерних элемента и сериализует документ обратно в string с помощью asXML(). Результат:

<?xml version="1.0"?>
<book isbn="123456789"><title>PHP Basics</title><author>John Doe</author></book>

Зачем использовать addAttribute() вместо синтаксиса массива?

SimpleXML позволяет читать атрибуты с помощью синтаксиса массива — $element['isbn'] — и даже записывать их таким образом. Зачем тогда нужна addAttribute()?

  • Это документально подтверждённый способ создания атрибута. Синтаксис записи через массив работает для изменения уже существующего значения, тогда как addAttribute() явно указывает на добавление нового.
  • Поддержка пространств имён. Синтаксис массива не может привязать пространство имён к устанавливаемому атрибуту; третий параметр addAttribute() позволяет это сделать.
<?php

$xml = new SimpleXMLElement('<book isbn="123456789"></book>');

// Update an existing attribute (array syntax is fine here):
$xml['isbn'] = '000000000';

// Add a brand-new attribute:
$xml->addAttribute('language', 'en');

echo $xml->asXML();

Добавление атрибута с пространством имён

Если документ использует XML-пространства имён, передайте URI пространства имён в качестве третьего аргумента. Имя атрибута должно включать префикс, к которому его нужно привязать:

<?php

$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('xml:lang', 'en', 'http://www.w3.org/XML/1998/namespace');

echo $xml->asXML();

Это создаст <book xml:lang="en"/>. Без аргумента пространства имён : в имени будет воспринят как буквальная часть имени атрибута, а не как префикс пространства имён.

Распространённые ошибки

  • Метод не перезаписывает атрибуты. Вызов addAttribute() с именем, которое уже существует, добавляет второй атрибут с таким именем, что приводит к невалидному XML. Чтобы изменить существующее значение, используйте синтаксис записи через массив ($xml['isbn'] = '...').
  • Специальные символы экранируются автоматически. Значения вроде Tom & Jerry автоматически кодируются в Tom &amp; Jerry в выводе, поэтому вам не нужно делать это самостоятельно.
  • Порядок важен при работе с пространствами имён. Добавляйте атрибуты с пространством имён после создания элемента; нельзя привязать атрибут к пространству имён на элементе, который не находится в области видимости этого пространства имён без его объявления.
<?php

$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('isbn', '123 & 456');

echo $xml->asXML(); // <book isbn="123 &amp; 456"/>

Связанные функции

  • addChild() — добавить дочерний элемент, а не атрибут.
  • asXML() — сериализовать SimpleXMLElement обратно в XML string.
  • attributes() — прочитать атрибуты, уже присутствующие на элементе.

Заключение

SimpleXMLElement::addAttribute() — это явный, поддерживающий пространства имён способ добавления атрибутов при построении XML с помощью SimpleXML. Используйте его при создании атрибутов (особенно с пространствами имён), а синтаксис записи через массив — когда нужно лишь обновить уже существующее значение. Помните, что метод никогда не перезаписывает атрибуты и автоматически экранирует специальные символы.

Практика

Практика
Что делает функция addAttribute в PHP?
Что делает функция addAttribute в PHP?
Was this page helpful?