Я пытаюсь подключиться к системе 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();
но возвращает пустой объект. как я могу получить атрибуты?
@u_mulder отредактировал.
Теперь начнем использовать поисковый parse xml namespaces или аналогичный.






Это не самый элегантный способ, но:
$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];
Это возвращает точное значение. Я также легко могу получить другие атрибуты. Спасибо
Ваш код не должен зависеть от getNamespaces() - это в основном функция отладки. Возвращаемый массив может отличаться для любого элемента XML (даже для одного и того же документа). Определите фиксированный массив (или константы класса) для URI пространства имен.
domain- это пространство имен.