У меня есть следующая структура XML:
<?xml version="1.0" encoding="utf-8"?> <q:quakeml xmlns="http://quakeml.org/xmlns/bed/1.2" xmlns:q="http://quakeml.org/xmlns/quakeml/1.2" xmlns:catalog="http://anss.org/xmlns/catalog/0.1"> <eventParameters publicID="static"> <event catalog:eventsource="rt"> </event> <event catalog:eventsource="rt"> </event> <event catalog:eventsource="rt"> </event> </eventParameters> </q:quakeml>
Я использую следующий код, который создает объект simplexml и пытается извлечь все объекты событий с помощью запроса xpath:
$se = simplexml_import_dom($dom); $se->registerXPathNamespace('q', 'http://quakeml.org/xmlns/quakeml/1.2'); $se->registerXPathNamespace('c', 'http://anss.org/xmlns/catalog/0.1'); $events = $se->xpath('//event');
Очевидно, что это не работает, но что я делаю не так.Как получить все объекты событий из этой структуры?
Поскольку у вас есть пространство имен по умолчанию для вашего документа (xmlns="http://quakeml.org/xmlns/bed/1.2"), вам необходимо зарегистрировать его и использовать префикс для всех элементов, которые не имеют определенного префикса пространства имен ...
xmlns="http://quakeml.org/xmlns/bed/1.2"
$se->registerXPathNamespace('d', 'http://quakeml.org/xmlns/bed/1.2'); $events = $se->xpath('//d:event');
Я склонен использовать d - но вы можете использовать все что угодно, если вы используете то же самое в вашем XPath.
d