Получение атрибутов xml php

Я пытаюсь подключиться к системе API, и она использует XML для связи. Когда я пытаюсь получить запрос, API возвращает мне строку XML, подобную этой:

<?xml version = "1.0" encoding = "UTF-8"?>
<epp xmlns = "urn:ietf:params:xml:ns:epp-1.0" xmlns:domain = "http://epp.nic.ir/ns/domain-1.0">
  <response xmlns:domain = "http://epp.nic.ir/ns/domain-1.0">
    <result code = "1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData xmlns:domain = "http://epp.nic.ir/ns/domain-1.0">
      <domain:chkData xmlns:domain = "http://epp.nic.ir/ns/domain-1.0">
        <domain:cd>
          <domain:name normalized_name = "dasfasfgg" canonized_name = "dasfasfgg" tld = "ir" avail = "1">dasfasfgg.ir</domain:name>
        </domain:cd>
      </domain:chkData>
    </resData>
    <trID>
      <clTRID>TEST-12345</clTRID>
    </trID>
  </response>
</epp>

Я хочу получить атрибут avail в пространстве имен domain:name. Я пробовал это:

$xml = simplexml_load_string($response);
$attrs = $xml->domain->attributes();

но возвращает пустой объект. как я могу получить атрибуты?

domain - это пространство имен.
u_mulder 07.11.2018 13:28

@u_mulder отредактировал.

ehsan 07.11.2018 13:32

Теперь начнем использовать поисковый parse xml namespaces или аналогичный.

u_mulder 07.11.2018 13:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не самый элегантный способ, но:

$xml = simplexml_load_string($response); // as response I understand given xml as string
$namespaces = $xml->getNamespaces(true);

$value = $xml->response->resData->children($namespaces['domain'])->chkData->cd->name->attributes()->avail[0];

Это возвращает точное значение. Я также легко могу получить другие атрибуты. Спасибо

ehsan 07.11.2018 14:45

Ваш код не должен зависеть от getNamespaces() - это в основном функция отладки. Возвращаемый массив может отличаться для любого элемента XML (даже для одного и того же документа). Определите фиксированный массив (или константы класса) для URI пространства имен.

ThW 07.11.2018 15:07

Другие вопросы по теме