xpath на объекте simplexml ничего не возвращает - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующая структура 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');

Очевидно, что это не работает, но что я делаю не так.Как получить все объекты событий из этой структуры?

1 Ответ

0 голосов
/ 20 ноября 2018

Поскольку у вас есть пространство имен по умолчанию для вашего документа (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.

...