Intereting Posts
Добавить атрибут объекта в PHP Как отправить значения массива флажков через Ajax с помощью jQuery? Правило .htaccess для многоязычного сайта Среди $ _REQUEST, $ _GET и $ _POST, какой из них самый быстрый? Объект Javascript для Json. PHP не может декодировать сериализованный JSON Как лучше всего преобразовать данные формы выбора даты CakePHP в объект PHP DateTime? Удалить дубликаты из массива Каскадный список выбора как настраиваемое поле с использованием hook_field_widget_form в drupal 7 Как ссылаться на статическую константу-членную переменную в PHP PHPMailer, Fatal error: вызов функции-члена Send () для не-объекта Предотвращать отправку писем, обрабатываемых как нежелательные письма, используя функцию php mail Соединения базы данных CodeIgniter не закрываются Xpath с foreach Отображение изображений, прикрепленных к странице, содержит медиа-галерею (и не все вложения) Хранить ошибки PHP в файле журнала

Как разбирать пространства имен xml с DOMDocument и обязательно получать объекты

Я пытаюсь разобрать ответ xml с другого сервера.

Я могу получить нужные объекты из этого xml. но несколько раз, и некоторые, как, я не могу получить некоторые объекты. и эта ошибка появляется.

Неустранимая ошибка: вызов функции-члена getElementsByTagName () для не объекта в строке 91

Я проверил все, и я думаю, что нет ничего плохого.

вот пример XML-ответа:

<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:infData xmlns:domain="http://epp.nic.ir/ns/domain-1.0"> <domain:name>pooyaos.ir</domain:name> <domain:roid>305567</domain:roid> <domain:status s="serverHold"/> <domain:status s="irnicReserved"/> <domain:status s="serverRenewProhibited"/> <domain:status s="serverDeleteProhibited"/> <domain:status s="irnicRegistrationDocRequired"/> <domain:contact type="holder">pe59-irnic</domain:contact> <domain:contact type="admin">pe59-irnic</domain:contact> . . and more... 

и я пытаюсь получить этот предметный domain:infData

Я думаю, что ошибка из этой части.

когда я пытаюсь получить этот объект, domdocument возвращает null.

PHP-код:

 function DinfData() { $data = $this->dom->getElementsByTagName("infData")->item(0); 91: $name = $data->getElementsByTagName("name")->item(0)->nodeValue; $roid = $data->getElementsByTagName("roid")->item(0)->nodeValue; $update = $data->getElementsByTagName("upDate")->item(0)->nodeValue; $crdate = $data->getElementsByTagName("crDate")->item(0)->nodeValue; $exdate = $data->getElementsByTagName("exDate")->item(0)->nodeValue; and more... 

Я пометил строку 91 по ошибке.

благодаря ….

редактировать

$this->dom – мой объект DOMDocument и не имеет ошибки.

Если нет ничего плохого, есть ли лучший способ получить элементы?

Вам нужно использовать DOMDocument::getElementsByTagNameNS() который предназначен для использования с элементами, находящимися под DOMDocument::getElementsByTagNameNS() . Найдите пространство имен, на которое указывает domain и передайте его методу вместе с именем целевого тега, например, roid или name .

Демо-версия Codepad

 $dom = new DOMDocument(); $dom->loadXML($xml); $ns = 'http://epp.nic.ir/ns/domain-1.0'; $data = $dom->getElementsByTagNameNS($ns, 'infData')->item(0); $roid = $data->getElementsByTagNameNS($ns, 'roid')->item(0)->nodeValue; $name = $data->getElementsByTagNameNS($ns, 'name')->item(0)->nodeValue; // repeat the same for others echo $roid . "\n"; echo $name; 

Выходы

 305567 pooyaos.ir 

Просто введите свой url в simple_load_file ()

 <?php $xml = simplexml_load_file($xmlfile); print $xml->infData; // Sample content ?> 

Это самый простой способ

Но infData не является вашим tagName. Этот XML использует пространства имен (домен – ваше пространство имен). У меня нет опыта в этом, поэтому я действительно могу помочь вам в дальнейшем, чем намек на то, где искать. GetElementsByTagName не будет работать, вам нужно что-то вроде DOMXPath, я думаю, что вы можете что-то сделать с пространствами имен.

Извините, я не могу помочь, но поскольку никто не упомянул пространства имен, я думал, что просто добавлю ответ. Возможно, это поможет вам Google получить ответ.