Intereting Posts
yii2 BaseActiveRecord findAll () условия больше или меньше Не удалось подключиться к почтовому серверу в порту «localhost» 25 Почему я могу просмотреть исходный код PHP в Интернете? Настройте _Session для работы с приложениями, развернутыми на нескольких серверах, разными субдоменами Имеет ли смысл определение функции? Symfony2 REST API – частичное обновление Как вернуть как целочисленный параметр, так и шаблон рендеринга в качестве ответа в Symfony2 Строка сообщения PHP Mail отображение сообщения после перенаправления пользователя на другую веб-страницу Что такое шаблон регулярного выражения для datetime (2008-09-01 12:35:45)? PHPExcel: загрузить файл Excel на стороне клиента Как использовать метод класса в качестве функции обратного вызова? Как управлять запросами с ограниченным API-интерфейсом Тестирование Sandbox в Paypal – изменение конечной точки URL? Опубликовать в Facebook Стена страницы

Анализ XML-данных с помощью пространств имен в PHP

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

<r25:events pubdate="2010-05-19T13:58:08-04:00"> <r25:event xl:href="event.xml?event_id=328" id="BRJDMzI4" crc="00000022" status="est"> <r25:event_id>328</r25:event_id> <r25:event_name>Testing 09/2005-08/2006</r25:event_name> <r25:alien_uid/> <r25:event_priority>0</r25:event_priority> <r25:event_type_id xl:href="evtype.xml?type_id=105">105</r25:event_type_id> <r25:event_type_name>CABINET</r25:event_type_name> <r25:node_type>C</r25:node_type> <r25:node_type_name>cabinet</r25:node_type_name> <r25:state>1</r25:state> <r25:state_name>Tentative</r25:state_name> <r25:event_locator>2005-AAAAMQ</r25:event_locator> <r25:event_title/> <r25:favorite>F</r25:favorite> <r25:organization_id/> <r25:organization_name/> <r25:parent_id/> <r25:cabinet_id xl:href="event.xml?event_id=328">328</r25:cabinet_id> <r25:cabinet_name>cabinet 09/2005-08/2006</r25:cabinet_name> <r25:start_date>2005-09-01</r25:start_date> <r25:end_date>2006-08-31</r25:end_date> <r25:registration_url/> <r25:last_mod_dt>2008-02-27T14:22:43-05:00</r25:last_mod_dt> <r25:last_mod_user>abc00296004</r25:last_mod_user> </r25:event> </r25:events> 

И вот что я использую для кода – я попытаюсь бросить их в кучу массивов, где я могу отформатировать вывод, но я хочу:

 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://somedomain.com/blah.xml"); curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml")); curl_setopt($ch, CURLOPT_USERPWD, "username:password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $xml = new SimpleXmlElement($output); foreach ($xml->events->event as $entry){ $dc = $entry->children('http://www.collegenet.com/r25'); echo $entry->event_name . "<br />"; echo $entry->event_id . "<br /><br />"; } 

Solutions Collecting From Web of "Анализ XML-данных с помощью пространств имен в PHP"

Выяснилось, что проблема связана с XML-каналом, а не с кодом:

В корне XML отсутствует эта строка:

 <r25:events xmlns:r25="http://www.collegenet.com/r25" xmlns:xl="http://www.w3.org/1999/xlink" pubdate="2010-05-19T13:58:08-04:00"> 

Спасибо за помощь.

«Всевозможные ошибки» не являются полезным описанием; какие ошибки вы на самом деле получаете?

Вы должны предоставить объекту вариант пространства имен, например:

 $xml = new SimpleXmlElement($output, null, false, $ns = 'r25'); 

См. Руководство .

В качестве альтернативы, поскольку r25 является единственным используемым пространством имен и, следовательно, не особенно полезно, я просто запускаю

 $xml = preg_replace('/r25:/','',$xml); 

И это удаляет пространство имен. Затем вы можете легко перемещаться с помощью simplexml, как в вашем примере.